{ "cells": [ { "cell_type": "markdown", "id": "d8026ddc", "metadata": {}, "source": [ "# Benchmark Time Series Causal Discovery Algorithms\n", "\n", "The benchmarking module for continuous data is **BenchmarkContinuousTimeSeries** and for discrete data is **BenchmarkDiscreteTimeSeries**. We import them as follows:" ] }, { "cell_type": "code", "execution_count": 1, "id": "f9368475", "metadata": {}, "outputs": [], "source": [ "from causalai.benchmark.time_series.continuous import BenchmarkContinuousTimeSeries\n", "from causalai.benchmark.time_series.discrete import BenchmarkDiscreteTimeSeries" ] }, { "cell_type": "markdown", "id": "ec17c2f5", "metadata": {}, "source": [ "Bechmarking modules allow benchmarking causal discovery algorithms on synthetically generated data across various aspects. For tabular data, the supported methods for the aforementioned modules:\n", "\n", "1. **benchmark_variable_complexity**: variable complexity (BenchmarkDiscreteTimeSeries and BenchmarkContinuousTimeSeries)\n", "2. **benchmark_sample_complexity**: sample complexity (BenchmarkDiscreteTimeSeries and BenchmarkContinuousTimeSeries)\n", "3. **benchmark_graph_density**: graph density (BenchmarkDiscreteTimeSeries and BenchmarkContinuousTimeSeries)\n", "4. **benchmark_data_max_lag**: maximum data lag (BenchmarkDiscreteTimeSeries and BenchmarkContinuousTimeSeries)\n", "5. **benchmark_noise_type**: noise type (BenchmarkContinuousTimeSeries)\n", "6. **benchmark_snr**: signal to noise ratio (BenchmarkContinuousTimeSeries)\n", "\n", "In addition to bechmarking on synthetic data, we also support benchmarking algorithms on user provided data. This is discussed in more detail under the section **Custom Data**.\n", "\n", "The main purpose of synthetic data benchmarking is to evaluate two aspects:\n", "\n", "1. how a specific caual discovery algorithm performs for different values of a variant (the above listed aspects).\n", "2. how different algorithms compare against each other in a particular setting.\n", "\n" ] }, { "cell_type": "markdown", "id": "1700ee7e", "metadata": {}, "source": [ "### How to specify causal discovery algorithms?\n", "\n", "Specifying causal discovery algorithms supported by the CausalAI library is very easy as shown below. Users also have the option to specify a custom algorithm as long as it adheres to the basic requirements. This is discussed on more detail under the section **Custom Algorithms**.\n", "\n", "Let's begin with a simple example, in which we want to benchmark causal discovery algorithms on synthetically generated discrete data.\n", "\n", "We begin by importing the supported algorithms for discrete data:" ] }, { "cell_type": "code", "execution_count": 2, "id": "f8cd1c52", "metadata": {}, "outputs": [], "source": [ "from causalai.models.time_series.pc import PCSingle, PC\n", "from causalai.models.common.CI_tests.partial_correlation import PartialCorrelation\n", "from causalai.models.common.CI_tests.kci import KCI\n", "from causalai.data.data_generator import DataGenerator, GenerateRandomTimeseriesSEM\n", "from causalai.models.common.CI_tests.discrete_ci_tests import DiscreteCI_tests\n", "\n", "from causalai.models.time_series.granger import Granger\n", "from causalai.models.time_series.var_lingam import VARLINGAM\n", "\n", "from functools import partial\n", "import numpy as np" ] }, { "cell_type": "markdown", "id": "05cbe191", "metadata": {}, "source": [ "Next, we create a Python dictionary of these algorithms in a format that the benchmarking module requires. Then we run the benchmarking module for sample complexity." ] }, { "cell_type": "code", "execution_count": 3, "id": "35a561a6", "metadata": {}, "outputs": [], "source": [ "algo_dict = {\n", " 'PC-PartialCorr':partial(PC, CI_test=PartialCorrelation(), use_multiprocessing=False,\n", " prior_knowledge=None),\n", " 'Granger':partial(Granger, use_multiprocessing=False, prior_knowledge=None), \n", " 'VARLINGAM':partial(VARLINGAM, use_multiprocessing=False, prior_knowledge=None)}\n", "\n", "kargs_dict = {\n", " 'PC-PartialCorr': {'max_condition_set_size': 4, 'pvalue_thres': 0.01, 'max_lag': 3},\n", " 'Granger': {'pvalue_thres': 0.01, 'max_lag': 3},\n", " 'VARLINGAM': {'pvalue_thres': 0.01, 'max_lag': 3}}" ] }, { "cell_type": "markdown", "id": "00321f96", "metadata": {}, "source": [ "**algo_dict** specifies the algorithms. Specifically, keys are the names of the algorithms, and values are the algorithm class. We use partial in order to pre-specify some arguments of the algorithm class constructor-- CI_test, use_multiprocessing, and prior_knowledge in the above cases.\n", "\n", "All these algorithms have a .run() method that performs the causal discovery. The benchmarking module internally calls this run method. This run method may have some arguments of its own. These arguments are pre-specified using **kargs_dict** above, and passed to the benchmarking module below. Of course, the kargs_dict is algorithm specific, and may be optional.\n", "\n", "**Default algo_dict and kargs_dict**: If algo_dict and kargs_dict are not specified (pass None for both), then there are default algo_dict and kargs_dict, that are used by the benchmarking modules, which include all the currently supported algorithms. The default algo_dict and kargs_dict for the BenchmarkDiscreteTabular module can be accessed through:\n", "\n", "BenchmarkDiscreteTimeSeries.default_algo_dict and BenchmarkDiscreteTimeSeries.default_kargs_dict\n", "\n", "Similarly, the default algo_dict and kargs_dict for the BenchmarkContinuousTimeSeries module can be accessed through:\n", "\n", "BenchmarkContinuousTimeSeries.default_algo_dict and BenchmarkContinuousTimeSeries.default_kargs_dict\n", "\n", "We run the benchmark_sample_complexity method of the module below," ] }, { "cell_type": "code", "execution_count": 4, "id": "63ff3248", "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 0/10 [00:00<?, ?it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 10%|███████████▊ | 1/10 [00:00<00:02, 3.23it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 20%|███████████████████████▌ | 2/10 [00:00<00:02, 3.50it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 30%|███████████████████████████████████▍ | 3/10 [00:00<00:02, 3.49it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 40%|███████████████████████████████████████████████▏ | 4/10 [00:01<00:01, 3.44it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 50%|███████████████████████████████████████████████████████████ | 5/10 [00:01<00:01, 3.47it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 60%|██████████████████████████████████████████████████████████████████████▊ | 6/10 [00:01<00:01, 3.48it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 70%|██████████████████████████████████████████████████████████████████████████████████▌ | 7/10 [00:02<00:00, 3.51it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 80%|██████████████████████████████████████████████████████████████████████████████████████████████▍ | 8/10 [00:02<00:00, 3.56it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 90%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 9/10 [00:02<00:00, 3.53it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 3.47it/s]\n", " 0%| | 0/10 [00:00<?, ?it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 10%|███████████▊ | 1/10 [00:00<00:02, 3.44it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 20%|███████████████████████▌ | 2/10 [00:00<00:02, 3.46it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 30%|███████████████████████████████████▍ | 3/10 [00:00<00:02, 3.36it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 40%|███████████████████████████████████████████████▏ | 4/10 [00:01<00:01, 3.40it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 50%|███████████████████████████████████████████████████████████ | 5/10 [00:01<00:01, 3.41it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 60%|██████████████████████████████████████████████████████████████████████▊ | 6/10 [00:01<00:01, 3.40it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 70%|██████████████████████████████████████████████████████████████████████████████████▌ | 7/10 [00:02<00:00, 3.37it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 80%|██████████████████████████████████████████████████████████████████████████████████████████████▍ | 8/10 [00:02<00:00, 3.33it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 90%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 9/10 [00:02<00:00, 3.30it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 3.34it/s]\n", " 0%| | 0/10 [00:00<?, ?it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 10%|███████████▊ | 1/10 [00:00<00:04, 2.24it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 20%|███████████████████████▌ | 2/10 [00:00<00:03, 2.38it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 30%|███████████████████████████████████▍ | 3/10 [00:01<00:02, 2.44it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 40%|███████████████████████████████████████████████▏ | 4/10 [00:01<00:02, 2.45it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 50%|███████████████████████████████████████████████████████████ | 5/10 [00:02<00:02, 2.40it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 60%|██████████████████████████████████████████████████████████████████████▊ | 6/10 [00:02<00:01, 2.32it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 70%|██████████████████████████████████████████████████████████████████████████████████▌ | 7/10 [00:02<00:01, 2.31it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 80%|██████████████████████████████████████████████████████████████████████████████████████████████▍ | 8/10 [00:03<00:00, 2.32it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 90%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 9/10 [00:03<00:00, 2.32it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:04<00:00, 2.33it/s]\n", " 0%| | 0/10 [00:00<?, ?it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 10%|███████████▊ | 1/10 [00:00<00:05, 1.52it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 20%|███████████████████████▌ | 2/10 [00:01<00:04, 1.63it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 30%|███████████████████████████████████▍ | 3/10 [00:01<00:04, 1.67it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 40%|███████████████████████████████████████████████▏ | 4/10 [00:02<00:03, 1.62it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 50%|███████████████████████████████████████████████████████████ | 5/10 [00:03<00:03, 1.61it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 60%|██████████████████████████████████████████████████████████████████████▊ | 6/10 [00:03<00:02, 1.59it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 70%|██████████████████████████████████████████████████████████████████████████████████▌ | 7/10 [00:04<00:01, 1.60it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 80%|██████████████████████████████████████████████████████████████████████████████████████████████▍ | 8/10 [00:04<00:01, 1.62it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 90%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 9/10 [00:05<00:00, 1.63it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:06<00:00, 1.61it/s]\n" ] } ], "source": [ "b = BenchmarkContinuousTimeSeries(algo_dict=algo_dict, kargs_dict=kargs_dict, \n", " num_exp=10, custom_metric_dict=None)\n", "b.benchmark_sample_complexity(T_list=[100, 500,1000,5000], num_vars=5, graph_density=0.1,\\\n", " data_max_lag=3,\n", " fn = lambda x:x, coef=0.1, noise_fn=np.random.randn) # default arguments in the library\n", "# note that the first argument for all the benchmarking methods is always the list of values of the variant" ] }, { "cell_type": "markdown", "id": "2cbe1365", "metadata": {}, "source": [ "Here, in addition to algo_dict and kargs_dict, we have passed two additional arguments-- num_exp and custom_metric_dict to the benchmarking module constructer. \n", "\n", "num_exp specifies the number of experiments (each with a different random seed) to run per configuration. \n", "\n", "custom_metric_dict can be used to specify any metric to record in addition to the default metrics that are recorded for the experiments conducted-- f1_score, precision, recall, and time_taken. We provide more detail about this below under the section **custom_metric_dict**." ] }, { "cell_type": "code", "execution_count": 5, "id": "2c4ae34b", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB+pklEQVR4nO3dd3xT9frA8U+60r0npdCyyi67FpQhowgiiFdQ+Ykg4lVAQVzUBehVwIEoIlwHS1EQxXEFGVZA2VA2QpmlrA5G90qT8/sjbWhoi21JkzQ8b1+8Qk7OOXnypePxO56vSlEUBSGEEEIIG2Fn6QCEEEIIIUxJkhshhBBC2BRJboQQQghhUyS5EUIIIYRNkeRGCCGEEDZFkhshhBBC2BRJboQQQghhUxwsHYC56XQ6Ll68iIeHByqVytLhCCGEEKIKFEUhOzubevXqYWd3876Z2y65uXjxImFhYZYOQwghhBA1cO7cOerXr3/Tc2675MbDwwPQN46np2eVr9NoNKxfv55+/frh6OhYW+GJEtLe5iXtbV7S3uYl7W1etdXeWVlZhIWFGX6P38xtl9yUDkV5enpWO7lxdXXF09NTvjnMQNrbvKS9zUva27ykvc2rttu7KlNKZEKxEEIIIWyKJDdCCCGEsCmS3AghhBDCpkhyI4QQQgibIsmNEEIIIWyKJDdCCCGEsCmS3AghhBDCpkhyI4QQQgibIsmNEEIIIWyKJDdCCCGEsCmS3AghhBDCpkhyI4QQQgibIsmNEEIIIWzKbbcruBBCCCFMKy2rgLTsQgCKi4s5lwNHLmbh4KBPMwI91AR6OpstHkluhBBCCHFLlu1M5qP4E2WOOPD+oR2GZxN7N+W5vs3MFo8kN0IIIYS4JSOiG9C3ZRAAiZcyef77Q3zwrzZEhngB+p4bc5LkRgghhBC3JNDT2TDsVFxcDEDjADdah3pZJB6ZUCyEEEIImyLJjRBCCCFsiiQ3QgghhLApktwIIYQQwqZIciOEEEIIm2LR5ObPP/9k0KBB1KtXD5VKxU8//fSP12zatIkOHTqgVqtp0qQJixcvrvU4hRBCCFF3WDS5yc3NJSoqinnz5lXp/DNnzjBw4EB69erF/v37mTRpEk888QTr1q2r5UiFEEIIURWOuZeIsTuCY+4li8Vg0To399xzD/fcc0+Vz1+wYAERERF88MEHALRo0YItW7bw4YcfEhsbW1thCiGEEKIq9i6l5f8m8q2TDmXlDBj0EXQYafYw6lQRv+3bt9OnTx+jY7GxsUyaNKnSawoLCyksLDQ8z8rKAkCj0aDRaKr83qXnVucaUXPS3uYl7W1e0t7mJe1tBimHIHk7DhteRYUCgErRofxvIsX52dAgBoLb3NJbVOffr04lNykpKQQFBRkdCwoKIisri/z8fFxcXMpdM2PGDKZPn17u+Pr163F1da12DBs2bKj2NaLmpL3NS9rbvKS9zUvau5YoCj2PvYpXwflyL6kUHY4bXuGyWyRbm716S2+Tl5dX5XPrVHJTE3FxcUyePNnwPCsri7CwMPr164enp2eV76PRaNiwYQN9+/bF0dGxNkIVZUh7m5e0t3lJe5uXtHctKczG7uBy7BK+RFVwHsUtGHJTUJU5RVHZUdznP3g1iGHALfbclI68VEWdSm6Cg4NJTU01Opaamoqnp2eFvTYAarUatbr8hl2Ojo41+iKv6XWiZqS9zUva27ykvc1L2ttE0o7B7s/hwHLQ5EOLQTDoY1QNu8K+r1D+NwmVokVR2aMaNAdHE825qc6/XZ1KbmJiYlizZo3RsQ0bNhATE2OhiIQQQojbgLYYjv8Guz6DM3+CWyDEjIeOo8Cz3vXzOozkb+cOvPX1b7z+f/fQqmVri4Rr0eQmJyeHkydPGp6fOXOG/fv34+vrS4MGDYiLi+PChQssXboUgKeeeopPPvmEl156iccff5w//viD7777jtWrV1vqIwghhBC2Kycd9i6BPYsg6zyERcMDX0KL+8DBqcJLNG4h7NC1ROMWYuZgr7NocrNnzx569epleF46N+axxx5j8eLFXLp0ieTkZMPrERERrF69mueee46PPvqI+vXr88UXX8gycCGEEMKUzifoe2mOrAKVHbT5F3QeC/XaWTqyKrFoctOzZ08URan09YqqD/fs2ZN9+/bVYlTCUtKyCkjL1i/bLy4u5lwOHLmYhYOD/ss00ENNoKezJUMUQgjbpSnQJzO7PoOL+8C7Idz9OrT/P3D1tXR01VKn5twI27ZsZzIfxZ8oc8SB9w/tMDyb2Lspz/VtZv7AhBDClmUkw56FsHcp5F2Bxr3h4RXQtC/Y2Vs6uhqR5EZYjRHRDejbUl/HKPFSJs9/f4gP/tWGyBAvQN9zI4QQwgQUBU5vgt1fQOIacHKHdiOg8xPg38TS0d0ySW6E1Qj0dDYMOxUXFwPQOMCN1qFelgxLCCFsR0GWfgn37s/h8nEIbAkDP4A2w0DtbunoTEaSGyGEEMLWpSfCrs/hwLcltWnuhXs/hIbdQKX65+vrGEluhBBCCFtUrjZNANwxTl+bxivU0tHVKkluhBBCCFuSe1lfm2b3Qn1tmvpdYOgX0PI+cLg95i5KciOEEELYgvMJ+rk0h3/Q16Zp/S/o8gTUa2/pyMxOkhshhBCirtIUwJEfS2rT7AXvBnD3a9D+0TpXm8aUJLkRQggh6pqMcyW1aZaUqU2zHJr2q7O1aUxJkhshhBCiLlAUOLNZv+rJBmvTmJIkN0IIIYQ1K8zW16bZ9TlcToSAFjDgfWg73KZq05iSJDdCCCGENTLUplkOmjx9bZqBH0D4nTZZm8aUJLkRQgghrIW2GI6vLalNs7mkNs1T0HG0zdemMSVJboQQQghLy72s37hyz0LIPFdSm+ZzaDn4tqlNY0qS3AghhBCWciFBP/R0eJX+eZsHb9vaNKYkyY0QQghhTpoC+Psn/dDThQTwagC9XtHXpnHzs3R0NZKel056fjoASdmZ2DlfICn7OE5X9BsfB7gEEOAaYLZ4JLkRQgghzMFQm2Yp5F2GxnfDQ99Cs9g6X5tm5fGVzD8w3/DcLQJeT7j++tNRTzOu3TizxSPJjRBCCFFbFEW/aeWuz8rUpnmkpDZNU0tHZzIPNnuQnmE9Adh06iDzj77N0y1epWfjtoC+58acJLkRQgghTO02q00T4Hp92On4pUwA6rk2pKVfS4vEI8mNEEIIYSrpx/WbV+7/Vl+bpvlAqU1jAZLcCCGEELdCp71em+b0JnD1h+h/Q6fR4FXf0tHdliS5EUIIIWoi94p+40pDbZrOUpvGSkhyI4QQQlTHhb0ltWl+0D9v8y/9BOHQDpaNSxhIciOEEEL8k+JCOPJTSW2aPTZRm8aWSXIjhBBCVCbzvH7YKWGJvjZNo142U5vGlklyI4QQQpSlKJD0l76X5thqcHS7XpsmoJmloxNVIMmNEEIIAddr0+z+AtKPQUBzGPBeSW0aD0tHV2dk5Ooozm1ERq7OYjFIciOEEOL2dvmEfoLw/m9KatMM0Cc14XdJbZpqWrE7mek/ZqDwJNOTM3CxS2Z45wZmj0OSGyGEELcfnRaOryupTbNRatNUg1ankJJVwLmreSRfzeP81TzOXcvnVFoOBy9kGs5TgFdWHaZ7swBCvFzMGqMkN0IIIW4fuVdg31LYvRAykyG0E9z/GbQaIrVpSiiKwrU8DclX8zh3NY9z1/I4dzXf8PeLGflotIrh/EAPNWG+rng4l08ptIpC0uU8SW6EEEIIU/POO439/56BI6v0B1o/AF2egNCOlg3MQvKKio0SFn0ik8/5a/qEJrdIazjXw9mBBr6uhPm40q9lEGElfw/zdaW+jwvOjvpVY5cy8+k28w901/Me7FUqwv1dzf3xJLkRQghho0pq09jv/C89LiageNaHXnHQfqTN16bRaHVcyijQJy3XSntgSpKZq3lcyS0ynOvkYEd9HxfCfFzpFO7D0A6hhuQlzMcVL1fHKr1niJcLM4a2YcqqQyiKfrrSO0Nbm73XBiS5EUIIYWsyz8OeRZCwWF+bJqIHOyMm0uGhV3BUO1s6OpNQFIX07EKjIaPkMkNIlzLzDT0oKhWEeDpT39eVJoHu9IoMJMzXhTBfVxr4uhLgrsbOzjQTp4d3bkC+7hyzEt7l5Y4vWWQyMUhyI4QQwhYYatN8XlKbxhXaPQydn0Dr3YiUNWvqXNG9rAJNSU9Lfpm5L/oemPPX8ijQXF9q7evmRJiPC/V9XWkX5kOYr4thKKmetwtODnZmi9vbzQ4Ht9N4u5nvPW8kyY0QQoi6qzAHDi7XJzXpx8A/Eu6ZBVEPXa9No9FYNsZKFBZrOV86VHQtv2TV0fX5L5n51+N2cbTX97b4uHJnE/+SISN970uYryvuavl1Xpa0hhBCiLrn8gl9sb3930BRDkQOgHvehYjuVlObRqtTSC1ZMn3uWn6ZZdP65CU1uwClZOjI3k5FPW9nGvi60rqeF/e0DtHPgykZOvJzc0JlJZ+rLpDkRgghRN1QrjaNH3QZCx1Hg3eY2cNRFIWMPI1Rb0vp0NH5kqGjskumAzzUht6W6Ag/Gvi6Ur+kNybEyxkHe8sN49gaSW6EEEJYt7yrsHcp7P6ypDZNR7j/v9ByCDjW7gTh/CLt9bkuZXpgShOYnMJiw7keagfqlwwX9W4eWDJkpE9e6vu44uJUt+b81GWS3AghhLBOF/fBri/g8Pf6CcO1UJumWKvjUmZBuXovpUNHl3MKDec62euXTNf3daVjQx+GtNcvmW5QksR4uTjK0JGVkORGCCGE9SguhL9/1g89nd8NXmHQ42XoMBLc/Kt9O0VRuJxTyJls+OXAJS5lFRqSl+SreVzKLEBbsmZapYJgT2fCfFyJ8HejR7OA6/VefF0I8nA22ZJpUbskuRFCCGF5mRdgz0LYuwRy06FRTxi+DJr1B/ub/6rKLtAYzXcpW7Du/LV88jVawAEOH8Lb1dHQ29KmvleZYnUuhPq4oHaQoSNbIMmNEEIIy1AUSNqi76U5thocXaDdI9D5CQiINJxWVKzjQoZxobrzZXpfMvKuL5l2drQzJCxdG/sR5utKPU81SUf28NCgfvh6mL9arjA/SW6EEEKYV2EOHFxRUpvmKIp/M7J7/ofjwQM5m2PPuQN5nLt6wDAPJiXLeMl0iJd+6Kh5sIdhr6P6PvqhowB3dbl5LxqNhjVJVLixo7BNVvEvPW/ePN577z1SUlKIiopi7ty5dOnSpcJzNRoNM2bMYMmSJVy4cIHIyEhmzZpF//79zRy1EEKIqlAUhcx8DamnD+O0byH1kn7EUZvHXpcYvnV+k/+lNKXovAIcBsDf3cmwr1HnCB9DT0wDX1eCvZxxlCXT4h9YPLlZsWIFkydPZsGCBURHRzNnzhxiY2NJTEwkMDCw3PmvvfYaX3/9NZ9//jnNmzdn3bp13H///Wzbto327dtb4BMIIYQo0Gg5X3a1UUmvy4UrOYRf28ow3W90tz/EFcWDpfThT69BOPuHE+bjyiu+1yvt1vdxwdXJ4r+aRB1n8a+g2bNnM3bsWEaPHg3AggULWL16NQsXLmTKlCnlzv/qq6949dVXGTBgAABPP/00v//+Ox988AFff/11ufMLCwspLLy+lC8rKwvQ9wBpqlGSu/Tc6lwjaq64uNjwKG1e++Tr27zqYnsXa3WkZBXqtwu4ll/yWFqsLp/0nOu7TDvaq2juqeFhxz/pn/8rvqoUrvm14Uzr93Br/wCPeXgwqtIl04rJ26UutnddVqzVGh5N2ebVuZdFk5uioiISEhKIi4szHLOzs6NPnz5s3769wmsKCwtxdjYu2uTi4sKWLVsqPH/GjBlMnz693PH169fj6upa7Zg3bNhQ7WtE9Z3LAXBgx44dXDhs6WhuH/L1bV7W1N6KAjnFcKUArhaquFzyeKUQrhSouFYEOuV6QuLlpOCnBj+1Qgdv8AtS8HNWaKpLIipzA/Wv7YAChQs+0Rzy/zcZbo0hF6jkZ7U5WFN727JD2Rf1j4cO4Zh0xWT3zcvLq/K5Fk1uLl++jFarJSgoyOh4UFAQx44dq/Ca2NhYZs+eTffu3WncuDHx8fGsWrUKbUmmeKO4uDgmT55seJ6VlUVYWBj9+vXD09OzyrFqNBo2bNhA3759cXR0rPJ1omYOJF+FQ3u44447iGrga+lwbJ58fZuXpdo7p7DY0NNS2vtS2gNzIaOAvKLrP0e9XByo7+NChL8L3UuGi8J8XKjv7UKotzNqxzJLprVFqI7+gt2eL7G7sBvFMxRdj5fRtfs/Qtz8CTHbJ6yYfH2bl+bvnazaD23atGFAy2iT3bd05KUqLD4sVV0fffQRY8eOpXnz5qhUKho3bszo0aNZuHBhheer1WrUanW5446OjjX6Iq/pdaJ6HBwcDI/S3uYjX9/mZer2LirWcTHjenXd68um9XVfruZeHzpSO+ir7TbwdSWmsX/JpF2XklVHrni5VCGuzAuQsAgSlkBuGkT0gOHLUDXrj729A9ZWMUa+vs3Dwd7e8GjK9q7OvSya3Pj7+2Nvb09qaqrR8dTUVIKDgyu8JiAggJ9++omCggKuXLlCvXr1mDJlCo0aNTJHyEIIYTE6nUJ6TuH1ei83bNR4KTOfkmK72KkgxMuFMF8XmgV50LtFkGGbgDAfV/zd1TWrtqsocHarvjbN0V/1tWmiHtbXpglsbtoPLEQNWTS5cXJyomPHjsTHxzNkyBAAdDod8fHxTJgw4abXOjs7Exoaikaj4YcffmDYsGFmiFgIIWpXZsku06WrjYx6YK7lU1SsM5zr5+Zk2KixY0Mfw/LpMF8X6nm7mHbJdGEOHPpOX5sm7W/wbwb3zIK2w8G56kP8QpiDxYelJk+ezGOPPUanTp3o0qULc+bMITc317B6auTIkYSGhjJjxgwAdu7cyYULF2jXrh0XLlxg2rRp6HQ6XnrpJUt+DCGEqJICjZak9Fz+vqbi6s5kLmYWGvXAZBVc32Xa1cmeBiUF6sruc9SgZA6Mm9oMP8Ivn4TdX8D+ZVCUA5EDoP8M/RCUbBIprJTFk5vhw4eTnp7OG2+8QUpKCu3atWPt2rWGScbJycnY2V3/v4+CggJee+01Tp8+jbu7OwMGDOCrr77C29vbQp9ACCGu0+oUUrIKSL5iPN+ldCgpLbu0NIU9DscTCfXRDxO1re/FgDYhJUNH+t4YXzcny+wyrdPCiQ36oadT8eDiC53HQKfHwbuB+eMRoposntwATJgwodJhqE2bNhk979GjB3///bcZohJCiPIUReFqbpEhYbm+WaO+9+ViRj4arWI4P9BDbeht6drYj/q+rtTzdOLE/h08PPgenNVOFvw0N8i7Cvu+0vfUZCRDvfYwZAG0uh8cnf/5eiGshFUkN0IIYU3yiooNVXaTy8x9OV+SyOSWWTLt4eyg723xcTXsc1Q696W+jwvOjuXXDGk0Gq4c1e+TZBUu7ofdn8Oh70HRQauh8K/FUL+jpSMTokYkuRFC3HY02pIl02Xmupy7pp+4e/5qHlfKLJl2KlkyHebjSudwX4Z2CDXMfQnzccXLtY4uLS4ugr9/1ic153aCZ33o8RK0HwnuAZaOTohbIsmNEMLmKIpCenah8WqjMj0wZZdMq1QQ4ulMmK8rTQPduTsyUL9cumQoKaCmS6atVdZF2LMIEhaX1KbpDsO/hmb3gL38ShC2Qb6ShRB1UlaBpmSuS165HphzV/MoLLNk2tfNSV9d19eVdmE+RvVe6nm74ORg47tMKwqc3VZSm+Z/JbVpHoLOY6U2jbBJktwIq5Gel056fjoASdmZ2DlfICn7OE5XvAAIcAkgwFW6y28XBRotFzLyDQnL+Rvmv2TmX99Ez8XR3pCs3NnE37DaqHT+i7s5lkxboxtr0/g1hf4z9YmN1KYRNuw2/Y4X1mjl8ZXMPzDf8NwtAl5PuP7601FPM67dOAtEJmqDVqeQmlVQbr5LafKSklVgONfeTkU9b2ca+LrSup4X97QOMWwdEObrip+llkxbqyun9Cue9i2Domz9kFPsO9Cop9SmEbcFSW6E1Xiw2YP0DOsJwKZTB5l/9G2ebvEqPRu3BfQ9N6LuUBSFjDyNUW/L9WXTeVy4Ycl0gIfa0NsSHeGnL1RX0hsT4uWMgymr7dqi0to0uz+Hk7/ra9N0Gq2vTePT0NLRCWFWktwIqxHgen3Y6filTADquTakpV9LS4YlbiK/SGuUsCTfsNdRTuH1arseagfq+7rSwNeFPi1Kl0y7lCyZdsXFydq2Wawj8q7Cvq9LatOchZB2MGS+fjm31KYRtylJboQQlSrW6riUWVCu3kvp4+WcQsO5Tvb6JdP1fV3p2NCHIe1DDfVfwnxd8HJxlKEjU7p0QD+X5tDKkto098O/FkJoRxl6Erc9SW6EuI0pin6X6aS0bPakq0jadJqLmYWGROZSZgHakjXTKhUEezoT5uNKhL+b0V5HYb4uBHk429aSaWtUXARHf9Gvejq3EzxDofuL0OExqU0jRBmS3AjrkZ2i/wOoM05df7zoon/dI1j/R1RLdoGm3HyX0uXS56/lk68prbZrj/eFszTw0/e2tA3zMtqosZ63M2oHGTqyiKxLkLBIX58mNw3C74JhX+k3sZTaNEKUI98VNqjskuqKWO2S6j2LYPNMABo6OUJoCA3/nAS/lyz57TEFesVZLj4rVVis5WJGgVGhuvMlyUzy1Twy8q4vmXZ2tDMkLF0b+xmWSod4OHF0918Mva8fjo51tOKurSmtTbP7c31tGnu1fgl3l7EQ2MLS0Qlh1SS5sUE3Lqm+kdUuqe40GiLvAeDigd8g7Rsutn+ellH6Y7drr41Op5CaXWDY66g0aSlNYFKyClBKFh3Z26kI8dIPHbUI9jTsdVS/ZN5LgLu6wnkvGo2GM/LTwDoU5cLB0to0R8CviX4Zd9RD4Oxl6eiEqBPkx5kNKruk+nTmaeL+imPGXTNo5NUIsOIl1WWGnTSnD0MaaDzCoF47y8ZVyxRFITP/+tBRcpmho/MlQ0dF2uvVdv3d1YZVRp0jfAjzcTXUewn2csZRlkzXTVdOwe4v9SufDLVp/gMRPcFO/k2FqA5JbmxQ2SXVpRp5NZIl1RaUX6TV7yhdutrI0AOjT2CyyyyZdlc76Ddq9HWlV/NAo0q79X1ccHWSb1uboejg+Dr9BGGpTSOEychPSSFMwLBkumS+y/Vl0/oemPTs60umHe1VhHrrE5b2Dby5L6qeoSemga8r3q6yZNrm5V+jcepvOHz6BmQkQUgUDP4UWg/V7/skhLglktwIUQWKonAlt8hQ7+X8teu9L+eu5nMxI59i3fVqu8GezoT5uhDu58adTQNK6r3oE5ogT2fsZcn07enSQdj1GQ6Hvqeltgil1VBUD3wB9TtJbRohTEiSGyFK5BQWl1sqbVh9dC2fvCKt4VwvF0dDb8s9rb2oXyZ5CfV2wdlRlkyLEobaNJ/DuR3gUQ9dt+fYcCWE3oMfxk5WpwlhcpLciNtGUbGOixnXq+smG5ZN65OZq7lFhnPVDnaGjRnvaORnqLJbOvfF01l+IYl/UFqbJmEx5KSW1KZZCpED0ekUCtessXSEQtgsSW6EVbqWr6I4txHX8qveVa/T6avtGlYb3VC4LiWrgNKRIzsVhHi5EObrQrMgD3q3CCpZcaTvjfF3V0u1XVF9igLJ2/UThG9Wm0anqfweQohbJsnNLaqzBfOs2Irdybwa74XCk7yarGDvnczwzg0AyMzTlJmoW7psOt8wdFRUfH3JtJ+bU8lGjfq9jsLK7HNUz9tFlkwL0ynK1e/xtOtzSD2sr03T721o97DUphHCAiS5uUV1tmCelbqUmU/cqkMo6HtNFFS8/MMhvtxyhkuZBWQXXF8y7eZkbyhQV7rPUYMyS6bd1PLlLWpZaW2a/V9DQZa+CGXfN6FRL6lNI24raVkFpJWsCj13Ld/wePhCJgCBHmoCPc23S7389L9FdbZgnpU6czmXMouODOr7uDCkfej1jRp9XPB1c5Il08L8dDp9TZpdn8HJDeDiAx1HldSmCbd0dEJYxLKdyXwUfwIAO+cLuEXAh/En+WC1PtGZ2Lspz/VtZrZ4JLm5RVZZMK/MBpRkJekf049DYcmEWSvegDLC3w0VUDa/sVepePv+NoR4Sf0PYUF5V2H/Mtj9BVxLkto0QpQxIroBfVsGAXDy2t+8ngCz/9WGJj7634WBHmqzxiPJjS0qswElJRtQsuoJKLL+DSgDPZzxcXPiam4hoMJOpfDOUElshAWlHNL30hxcCbpiaHU/DJXaNEKUFejpbBh20jm4AdAowI3WQZaZcybJjS0qswElyZsh8Qu4+3Vo0EN/zEp7bQA2H0/jam4RT3XKYUnat7zedJhhMrEQZlNcBMf+p58gnLwdPOrBXc9Dx8fAPdDS0Qkh/oEkN7fKGoeAyr5naUzeDevEBpRLtp2lTagXbYOu4ZB7Gh+XCibgCFFbsi7p69IkLLqhNs0AsJfaRkLUFZLc3Ko6PARkbU6n57D5eDrvPxiFKj/J0uGI24WiQPKOkto0v5TUphkOncdCkGw2K0RdJMnNrarDQ0DW5qsdZ/FxdeTetiFs3GnpaITNK8orU5vmEPg2lto0QtgISW5uUZriTZqin+x6QfkbgHNKADolAoBARY2M0P+z3MJivt9znv+LaSj7MonadfW0vjbNvq/0tWma9Ye+06U2jRA2RJKbW1R2bX9T50SIgPfXJXKiQP9/fuZe219Xrdp3gdyiYv7vjoaWDkXYIp0OTsXrh55ObAAXb+jwGHQeI7VphLBBktzcorJr+/ceTuO9FHg0JpwOre8EzL+2vy5SFIWl25Lo2zKIUG9Z8i1MKP8a7CutTXMGgtvC4E+g9QNSm0YIGybJzS0qu7b/QrIaUiDIU03rUBmzr6rtp65wIi2H6YNbWToUYStSDunn0hz8rqQ2zRAY+hnU7yy1aYS4DUhyIyxuyfYkmga6E9PIz9KhiLpMq9GvdjLUpgmR2jRC3KYkuREWdSEjnw1/pzJ9cGvZJ0rUTHaKvjbNnkWQkwIN74QHl0DzgVKbRojblCQ3wqK+3nEWNycHhrYPtXQooi4prU2z+3P4+2ewd4K2w6HLWAiS4U0hbneS3AiLKdBoWb4rmX91qo+bWr4URRVUWJvmPxD1sH4FlBBCIMmNsKBfD17iWp6GR2X5t/gn5WrTxELfadDobqlNI4QoR5IbYRGKorBkWxI9mgXQKMDd0uEIa3RjbRpnL+gwEjqNAd8IS0cnhLBiktwIi9h3LoNDFzJZOKqTpUMR1ib/Guz/Rl+b5uppCG4D983V16ZxcrV0dEKIOkCSGxuUllVAWnYhABeu5QFw7loeuguZgL6wYGltHktZui2JBr6u9GgmS3RFiZTD+gnCB7/TL+tuORiGLICwLlKbRghRLZLc2CBr3xIiLbuA1Ycu8XL/5tjbyS+t25pWA0f/V1KbZpu+Ns2dz+m3RvAIsnR0Qog6yipm4s2bN4/w8HCcnZ2Jjo5m165dNz1/zpw5REZG4uLiQlhYGM899xwFBQVmitb6jYhuwK/P3Mmvz9zJozHhgH5LiNJjI6IbWDS+5bvOYW+n4sGOYRaNQ1hQdipsmgUftobvR+t7Zh5cDJMOQY+XJLERQtwSi/fcrFixgsmTJ7NgwQKio6OZM2cOsbGxJCYmEhhYfsjim2++YcqUKSxcuJCuXbty/PhxRo0ahUqlYvbs2Rb4BNbHmreE0Gh1LNt5lvvbh+LlKgXWbiuKAud26ntp/v5ZX2BPatMIIWqBxZOb2bNnM3bsWEaPHg3AggULWL16NQsXLmTKlCnlzt+2bRvdunXjkUceASA8PJyHH36YnTt3mjVuUTPrjqSQmlXIyJIeJXEbKMqDw9/rVz2lHALfRtD3TWj3iNSmEULUCosmN0VFRSQkJBAXF2c4ZmdnR58+fdi+fXuF13Tt2pWvv/6aXbt20aVLF06fPs2aNWt49NFHKzy/sLCQwsJCw/OsrCwANBoNGo2myrGWnnuza3RaneGxOveuTdYW0+KtZ+gc7kMTf5ebxqPVag2P1hC3ravK13e1XUvCLmEhdge+gYJMlCZ90T30GkqjXqCyK31j071fHVIr7S0qJe1tXsXFxYZHU7Z5de5l0eTm8uXLaLVagoKMx9eDgoI4duxYhdc88sgjXL58mTvvvBNFUSguLuapp57ilVdeqfD8GTNmMH369HLH169fj6tr9ZeVbtiwodLXzlxOBAdITEyk6Mqaat+7NlhTTBdyYc9ZB0Y107Jmzc1jOXP5JDjAyZMn0WZYR1veDm729V0lio7A7MNEpG8gKOsgGntXTvt1J6lRb/LUgZBYCIlrTROsDbjl9hbVIu1tHheLLwKwc8dOzjmcM9l98/LyqnyuxYelqmvTpk288847fPrpp0RHR3Py5EkmTpzIW2+9xeuvv17u/Li4OCZPnmx4npWVRVhYGP369cPT07PK76vRaNiwYQN9+/bF0bHiuSK/78yGUxAZGUmf6AHV/3C1wJpievWnIwR5XualR+7C0f7mc9nXbcuAJGjSpAmxXa2jLW1ZVb6+b6ogE7uD32K350tU186gBLVBe9eHqFoNJdzRlXCTR1y33XJ7i2qR9javQ2mH+PT3T4m+I5o2gW1Mdt/SkZeqsGhy4+/vj729PampqUbHU1NTCQ4OrvCa119/nUcffZQnnngCgDZt2pCbm8uTTz7Jq6++it0NpdjVajVqtbrcfRwdHWv0RX6z6+xKfmHb2dtZzTeQtcSUkVfELwcvMb5nE1ydy/973Mje3t7waC1teTuo9veFUW2aImg5BO5fgCosGgepTfOPavpzSNSMtLd5ODg4GB5N2d7VuZdFkxsnJyc6duxIfHw8Q4YMAUCn0xEfH8+ECRMqvCYvL69cAlP6i1BRlFqNV9Tcyj3n0engoS6WXYYuTECrgWO/6lc9nd0K7sHQbRJ0fAw8Kv6fEiGEMCeLD0tNnjyZxx57jE6dOtGlSxfmzJlDbm6uYfXUyJEjCQ0NZcaMGQAMGjSI2bNn0759e8Ow1Ouvv86gQYMMSY6wLlqdwtIdSQxsG0KAxz/32ggrlZ0KCYshYRFkX4KG3eBfi6DFIP2ybiGEsBIWT26GDx9Oeno6b7zxBikpKbRr1461a9caJhknJycb9dS89tprqFQqXnvtNS5cuEBAQACDBg3i7bffttRHEP9gU2Ia567m8/FDsvt3naMocG6Xfhm3oTbNMOg8FoJbWzo6IYSokMWTG4AJEyZUOgy1adMmo+cODg5MnTqVqVOnmiEyYQqLtyURVd+L9g18LB2KqCpNPhwqrU1zEHwioO/0kto08u8ohLBuVpHcCNt1Kj2Hv05c5oMHoywdiqiKa0mwfwns+xryM6BpP+g9FRrfDXZWsVuLEEL8I0luRK36avtZfN2cGNg2xNKhiMrodKhO/UH0qdk47DsAzp7Q/lHoPEZfTVgIIeoYSW5ErckpLOb7hPM81rUhzo4y2dvq5GfA/m9g9+c4XD2Ni0sDtAM/xCFqODhVv8ClEEJYC0luRK35ce958oqKGREtE4mtSuoR/TLugytKatMMpvjeuWw6eJkB7QaC1AERQtRxktyIWqEoCku2n6Vfy2DqebtYOhyh1cCx1SW1abaU1KaZCB1HgUcwikYDh2SbCyGEbZDkRtSKbaeucDIth7cGy3Jhi8pOhb1LYM9CfW2aBl2lNo0QwuZJciNqxZJtSTQLcueORr6WDuX2oyhwfrd+GfeRn8DOQV+bpstYCDbdPi9CCGGtJLkRJnf+Wh6/H03lzcGtUcn+QuYjtWmEEAKQ5EbUgq93JOOmduD+9qGWDuX2cC0Jdn8J+74qqU3TF3q/AY17S20aIcRtSZIbYVIFGi0rdifzYMcw3NTy5VVrdDo4vVE/Qfj42uu1aTo9Dn6NLR2dEEJYlPz2ESb1vwMXuZan4dEYWf5dKwoy9bVpdn0OV09BUBsY9BG0eVBq0wghRAlJboTJ6Jd/J9EzMoAIfzdLh2NbUv+G3Z/DgRWgLYQW98HgedDgDpB5TUIIYUSSG2Eye5MzOHwhi0WjOls6FNtQrjZNEHR71lCbRgghRMUkuREms3R7Eg39XOnRLMDSodRtOWmQUFqb5iI0iIF/LYTmg8DBydLRCSGE1ZPkRphEWnYBaw5d4uX+zbGzk2GSajPUpvkcjvxYUpvmQeg8FkLaWjo6IYSoUyS5ESbx7c5zONjZ8WDHMEuHUrdo8uHwD/raNJcOgE849JkG7UdIbRohhKihGic3xcXFbNq0iVOnTvHII4/g4eHBxYsX8fT0xN3d3ZQxCitXVKxj2c6zDGkfiperlPSvkmtnYc+XsHcp5F+DJn3hkZXQpI/UphFCiFtUo+Tm7Nmz9O/fn+TkZAoLC+nbty8eHh7MmjWLwsJCFixYYOo4hRVbdySFtOxCHusqy79vqqLaNO3+DzqPkdo0QghhQjVKbiZOnEinTp04cOAAfn5+huP3338/Y8eONVlwom5Yuj2J6Ahfmgd7WjoU61SQCfu/1S/lvnISglrDoDkltWlkybwQQphajZKbv/76i23btuHkZLxyIzw8nAsXLpgkMFE3HLmYye6ka8wf0cHSoViftKP6XpoDy6/Xprlvrn71k9SmEUKIWlOj5Ean06HVassdP3/+PB4eHrcclKg7lm47S4iXM31bBlk6FOugLYbEkto0SX/pa9N0fUZfm8YzxNLRCSHEbaFGyU2/fv2YM2cOn332GQAqlYqcnBymTp3KgAEDTBqgsF4ZeUX8tP8Cz9zdBAf723wSbE467F0MexZB1gUIuwMe+FLfWyO1aYQQwqxqlNy8//779O/fn5YtW1JQUMAjjzzCiRMn8Pf359tvvzV1jMJKrdh9DkWBh7o0sHQolqEocH6Pfhn33z+Byl5q0wghhBWoUXITFhbGgQMHWLFiBQcOHCAnJ4cxY8YwYsQIXFxcTB2jsEJancJXO85yb9sQ/N3Vlg7HvDT5cHhVSW2a/fraNL3fgHYjwNXX0tEJIcRtr9rJjUajoXnz5vz666+MGDGCESNG1EZcwsptPJbG+Wv5fPJIuKVDMR9DbZqvIP9qSW2a70pq09hbOjohhBAlqp3cODo6UlBQUBuxiDpkyfYkosK8aRfmbelQapdOB2c26ScIJ/4Gak9oL7VphBDCmtVoWGr8+PHMmjWLL774AgcH2cHhdnMyLYe/Tlxm9rAoS4dSewqy4MC3+qTmygkIbAX3fghth0ltGiGEsHI1ykx2795NfHw869evp02bNri5Gf+wX7VqlUmCE9bp6x1n8XNzYmBbG1zaXFqb5uAK/dyalvfBoI+gYVepTSOEEFVwpeCK0aMl1Ci58fb25oEHHjB1LKIOyCks5vuE84zqGo7awUbmmWiLIXGNfoJw0l/gFggx40tq09SzdHRCCFFnrDqximnbpgEwcdNEpnWdxtCmQ80eR42Sm0WLFpk6DlFHrNp7nnyNlkeibWD5t9SmEUKIW6bVacktzuVMxhmmbZuGggKAgsL07dPpWq8rwW7BZo3plibMpKenk5iYCEBkZCQBAQEmCUpYJ0VRWLItiX4tg6jnXUeX/CsKXEjQ99Ic+RFUdvo9nrqMhRAbnkMkhBAV0Og05BTlkFOUQ7Ymm1xNLtlF2eRocvSPRTnkaEr+lJxz4/m5mtxK769TdJzLPlc3kpvc3FyeeeYZli5dik6nA8De3p6RI0cyd+5cXF1dTRqksA5bT17hVHoub9/fxtKhVJ+mAI6U1Ka5uA+8G8Ldr+tXPkltGiFEHaMoCoXaQkPSYUhGSpOQopJERZNt/PoNyUqBtvLVz052Trg7uePh5IGboxsejh64O7nj7+mPh5P+7+6OJX+c3CnWFhO3Jc7QcwNgp7IjzCPMHE1ipEbJzeTJk9m8eTP/+9//6NatGwBbtmzh2Wef5fnnn2f+/PkmDVJYhyXbk4gM8iA6og4lAxnJsPtL2Lu0pDZNH6lNI4SwKEVRyCvOqzgp0WSTW1RBUlImiSk9r1hXXOl7uDi44OHogZvT9aTE08mTUPdQ3B3djY6XPpZNVjycPHCyr/7wfKGukOnbpqNDhx12TI2ZavZeG6hhcvPDDz/w/fff07NnT8OxAQMG4OLiwrBhwyS5sUHnruYRfzSVt4a0RmXtq4YUBU5v0q96Ov4bOHlA+xHQ+QmpTSOEuCWl80tKe0cqSjrKJiVlh3nKDuXoFF2F91ehws3RzZBoeDh54O7ojr+LP+Ge4cbJSJnXyz53c3TDwc4yZVqGNh2Kj5MPz256ljk959CrYS+LxFGjT5+Xl0dQUPldoAMDA8nLy7vloIT1+XrnWdzUDtzfPtTSoVSuXG2aljBwttSmEUIAJfNLCmo+vySnKIe84sp/x9mr7CtMOuq517t+7IYkpPS80kdXR1fsVHV7I2I/Zz+jR0uoUXITExPD1KlTWbp0Kc7OzgDk5+czffp0YmJiTBqgsLwCjZYVu88xrFMYrk5WWLQx7Rjs/hwOLNfXpmkxSGrTCGFDqjK/pGxSUi5ZKcohsyCT15a/Vul7lJ1fUnYeSWXzS8oO5ZT+3dne2fp7tm8TNfpN9dFHHxEbG0v9+vWJitKvMDlw4ADOzs6sW7fOpAEKy/tl/0Uy8zU8ekdDS4dynbZYP+S06zM486e+Ns0d46DTaKlNI4QVMef8EkMCcsP8Eld7V86ePEuXqC54O3sbJSWlvSc1mV8irFeNkpvWrVtz4sQJli1bxrFjxwB4+OGHZVdwG6QoCou3JdGzWQDh/lYwtJOTDnuXlNSmOQ9h0VKbRohaUt35JRW9/k/zS0ont944vyTCM8Jo0uutzC/RaDSsObeGAY0G4OjoWBtNJaxMjccYXF1dGTt2rCljEVZob/I1/r6UxYv9O5v1fZ0LrtE5vwDngmv6A+dLa9OsKqlN8y/oPBbqtTNrXELUFTfWLyk7n6TskE25JcO3OL8k1D30+lySmyQltjK/RFinGiU3M2bMICgoiMcff9zo+MKFC0lPT+fll182SXDC8hZvO0u4nys9mpqxQOPepfTc8jq9UFBSXoNDn0FmMng3kNo0wuaVnV9S4Wqbf5pfUs36JWWTjhvnl9xY30Tml4i6okbJzX//+1+++eabcsdbtWrFQw89JMmNjUjLKuC3Q5eIG9ACOzsz/RDLvAD/m4iqpAiUCvSJzeBPIeohqU0jrFpV55dkFWRxLPcYv//5u2HYx1TzS8oerygpcXd0l/klwubVKLlJSUkhJKT8jtABAQFcunTploMS1uGbXck42tvxr471zfOGOi3snA8Vjc97N5DERtQqc80vcXdyx83BjSJdEe666/NLyiYlZYduyi4ZtmT9EiHqkhp9l4SFhbF161YiIiKMjm/dupV69aq/UmXevHm89957pKSkEBUVxdy5c+nSpUuF5/bs2ZPNmzeXOz5gwABWr15d7fcWFSsq1rFsZzJDO4Ti5WKGCXhJW2BtHKQcLP+ayh58G9V+DKLOssb5JTfWMSk7v0Sj0bBmzRoG9JQJrkLUhholN2PHjmXSpEloNBruvvtuAOLj43nppZd4/vnnq3WvFStWMHnyZBYsWEB0dDRz5swhNjaWxMREAgMDy52/atUqioqKDM+vXLlCVFQUDz74YE0+iqjE2iMppGcXMjImvHbf6OoZ2PAGHP0FQjvCmA2Qfgzll4mo0KFgh2rQHPCy4uKBosZudX5J6TXVnV/i4ehR4fySsnVMZH6JEHVXjZKbF198kStXrjBu3DhDouHs7MzLL79MXFxcte41e/Zsxo4dy+jRowFYsGABq1evZuHChUyZMqXc+b6+xhNJly9fjqurqyQ3JrZ0WxJ3NPIlMtijdt6gMBv++gC2zwNXf7j/M/3u3HZ2ENaFTVczWXryY0Y2eZZeHUbWTgzilvzT/JKyQzYmqV9SkoTcOL/kZpNeZX6JELenGiU3KpWKWbNm8frrr3P06FFcXFxo2rQparW6WvcpKioiISHBKCGys7OjT58+bN++vUr3+PLLL3nooYdwc6u4BkthYSGFhYWG51lZWYC+W1ij0VQ51tJzb3aNTqszPFbn3rWpJjEduZjFnrPX+OShKNN/Dp0W1cHl2G96Gwqz0MU8iy7mGXByIy0jj/Rs/b/VmUI1e1ycuatQjc/ZKwAEeKgJ9Kje15iomFanJa84z5CEZORncExzDO1JLQVKQYVl6HM1uUbHcoursD9O2Qmuju74qf1o6N7QcMxwTtkJsCXHTTK/RKcfsrI2Vfl5IkxH2tu8iouLDY+mbPPq3OuWfnK4u7vTuXNnsrKy+O2334iMjKRFixZVvv7y5ctotdpy+1QFBQUZigPezK5duzh8+DBffvllpefMmDGD6dOnlzu+fv16XF1dqxxrqQ0bNlT62pnLieAAiYmJFF1ZU+1714aaxPTNSTu8nVQUJSWw5qzpYvHLOUbr88vwzj/LOZ8YjoY/SH6uP/yun0P12zk71p7Xz0lo6nwBIuDb3Rd4868dAPSvr+OesIp/md5OtIo+ASlQCihUCvWPFBqOGR1XCssdK1AKKKKo4pvvAjvscFY5o1ap9Y/oH51Vzvip/KinqoezvTNqh+vHS88vvcYJJ+P6JZqSP5XILfkvlVSTtpW1u9nPE2F60t7mcbH4IgA7d+zknMM5k923OntX1ii5GTZsGN27d2fChAnk5+fTqVMnkpKSUBSF5cuX88ADD9TkttX25Zdf0qZNm0onHwPExcUxefJkw/OsrCzCwsLo168fnp6eVX4vjUbDhg0b6Nu3b6UTAH/fmQ2nIDIykj7RA6r+QWpRdWO6llfES7v/ZHzPRgzqYaJJvBlnsY+fjt2JX9CFtKd42AKC63cm+IbTOmUX8lRJz835pMvEJcHEXo2oH34HUPd7boz2x9HkXO8JKR3GKe0RKdtDUnYYp+SaqswvKdtbEuAUYNRLYrSMuOS4s8qZvdv3MqD3ANyd3WV+SS2rys8TYTrS3uZ1KO0Qn/7+KdF3RNMmsI3J7ls68lIVNUpu/vzzT1599VUAfvzxRxRFISMjgyVLlvCf//ynysmNv78/9vb2pKYa/99aamoqwcE3/uozlpuby/Lly3nzzTdvep5ara5wuMzR0bFGX+Q3u87O3s7waC3fQNWNadX+ZBQFRtwRfuufoTAb/ppdMq/GF+7/L3ZthmFnV3FF0lBfR0J93fXx5rhBEjTwd6NtQ8vtLFuqdH5JhZNea2l+iYejB15qL+p71DeaX1LZpNdbmV+i0Wg4YXcCDxcPq/navR3U9OeQqBlpb/NwcHAwPJqyvatzrxolN5mZmYaJvWvXruWBBx7A1dWVgQMH8uKLL1b5Pk5OTnTs2JH4+HiGDBkCgE6nIz4+ngkTJtz02pUrV1JYWMj//d//1eQjiApodQpfbT/LvVEh+LnfQg+JTgf7l0H8m1CYBXdOgm4Twanqe1NdKcoyerwVldUvqc6mfVWtX1K2R6Rs/ZLSpKTs0uCyK3WkfokQQphOjevcbN++HV9fX9auXcvy5csBuHbtGs7OztW61+TJk3nsscfo1KkTXbp0Yc6cOeTm5hpWT40cOZLQ0FBmzJhhdN2XX37JkCFD8POz/P/V24o/jqVxISOfx25l+ffZbbB2Clw6AK3/BX2mgXdYtW6x6sQqph2cA8DEg3N4Ue1Iz/o9/7F+idEwThXrlzioHMoVTyutX3Kzomplj8v+OEIIYV1qlNxMmjSJESNG4O7uTsOGDenZsyegH65q06Z642vDhw8nPT2dN954g5SUFNq1a8fatWsNk4yTk5PLDWMkJiayZcsW1q9fX5PwRSWWbEuiXZg3UWHe1b/42ll9vZq/f4J6HeDx9dAgutLTC7WFpOWmkZqXaviTlpfG2cyzbLm4xXCegsK7u9/l3d3vlruH2l5t1BNSOkQT4BVQYVJS+nrZnYalfokQQtieGiU348aNIzo6muTkZPr27WtIPho1asR//vOfat9vwoQJlQ5Dbdq0qdyxyMhIFEWp9vuIyp1My2bLyct8ODyqehcWZsOWD2HbJ4Z5NTmRA0gruEzKxW2k5uqTlrIJTGpuKtcKrxndxsPRgyC3INT2FQ+HvdDpBToFd5L6JUIIIf5RjQf5O3bsSMeOHY2ODRw40Oi5p6cn+/fvp1EjKZ1v7ZZuP4u/uxMD2pTfM6yUoihkFGboE5WcS6QeX63/g4a0pm1JVbuQemQOufvfNrrO19mXINcgglyDiAqIIqhhEIGugQS5BRmOuzrql+Wn5KYQ+0Os0fwWO5UdseGxBLvdfJK5EEIIAbdY5+afSO+K5WVosoweK5JdoOGHhGSGx3iTeO3I9Z6W3OtDRqU9MEW66/VR7BWFAHdXAr0bEeQZRuOSRKU0aQl0DSTQNbBaPSzBbsFMjZnK9G3TSjdfYGrMVElshBBCVJksz7Bhq06s4u0znwLw9plPueCWR3Of5teHh0qSltMZF1A1usbKNB0rS+r8qe3V+t4V1yCC3YJpG9CWIJwIPr6BwDPbCPJvgV/sTOwbdjV53EObDsUnJ4NnD37InLaT6NV0qMnfQwghhO2S5MZGpeSmMG3bNBT0vWcKCosOLwLA3dHd0MMS4dWIk8n1aOoezHO9OhuGibzUXtcn2hbmwJbZ+nk1Lj4w4CNo+5B+H6ha4ufkafQohBBCVJUkNzbqj+Q/DIlNWfN6z6N7/e6G53+dSOfrX3fx8ZN3EF3/hmX1Oh0cXA6/T4eCDOj2LHSbBGr32g1eCCGEuAW1mtzIElvLWJe0jvd3v1/uuJ3KjmY+zYyOLdl2lubBHnSJMN5tnbPbS+rV7IdWQ6HvdPBuUItRCyGEEKZRq5XHZEKxeSmKfujphc0v0De8L6/f8Toq9AmmqoKJueeu5hF/LJWRMeHXE9GMZFg5Chb11z8fvRYeXCSJjRBCiDqjVntufvvtN0JDQ2vzLUSJYl0xM3fNZEXiCsa2Gcsz7Z9BpVKhpF7lP2fm8WrEOIbeMDH36x1n8VA7MKR9Pf28mq1zYNtccPaGIfNrfV6NEEIIURtM+pvr3LlzPP7444bnd955Z4WbVgrTytPkMXHjRL4//j3TYqbxbIdnDT0x3o6eRo+l8ou0LN99jmEdQ3H9+zuY2xG2fgwxE+CZBGj3iCQ2Qggh6iST/va6evUqS5YsMeUtxT9Iy0tj1NpRJKQmMK/3PB5oVrUd2X85cIGmhYd58dw4+OlpaBgDE3ZD79dlwrAQQog6rVrDUr/88stNXz99+vQtBSOq58S1E4yLH4dO0bGk/xIifSOrdJ1y7SxB6yfwvdOfYN9OP6+mYUztBiuEEEKYSbWSmyFDhujncdxkorCskDKPHZd28NzG56jnXo95vedVWsFXXXCNzvkFqAuuGebVKFs/pmWxC8fumEnz2H/L8JMQQgibUq3faiEhIaxatQqdTlfhn71799ZWnKKMn0/+zNMbniYqIIol/ZdUvjXB3qX02PwqC1PS6LH5VZjdErZ+zAavfzHKfT7NYp+SxEYIIYTNqdZvto4dO5KQkFDp6//UqyNujaIofLr/U17b+hqDmwxmbu+5uDtVMj8m8wL8byKqkkJ+KhQozOLKgz8wPuVe/hXTAjs76WUTQghhe6o8LHXw4EFefPFFcnNzKz2nSZMmbNy40SSBCWMarYZp26fxy6lfmNhhImNaj6l4CDDvKpyMh31fQ5mdtfUU/jh8HicHH/7Vqb5Z4hZCCCHMrcrJTfv27bl06RKBgYE0atSI3bt34+dnXK7fzc2NHj16mDzI211WURaTN05mb9peZt41k4GNBl5/UVHg0gE4sQFOrIcLe/RJTWALQAVltmBQVPYsPmbH0A6heDo7mv1zCCGEEOZQ5eTG29ubM2fOEBgYSFJSEjrdjb0CojZczLnI+PjxpOWl8Vnfz+gU3AkKMuH0Jn0yc+J3yEkBJw9o3AsGfQxN+oBnCOxdivLLRFToULBjf9Q0juxw58OYcEt/LCGEEKLWVDm5eeCBB+jRowchISGoVCo6deqEvb19hefKknDTOHLlCBPiJ6C2V/NV9Js0OrUN1k6D5O2gK4aA5tD2QWgaC2HR4OBkfIMOI9mcmc2SxDk8FjmJj4+2I6aRPc2CPCzyeYQQQghzqHJy89lnnzF06FBOnjzJs88+y9ixY/HwkF+StWXzmfW8uGUKTexcmHvxMn6HhoKDCzTqAffMgiZ9wafhP96n0NmHPS7OxBT4sTc5gwX/19EM0QshhBCWU606N/376zdTTEhIYOLEiZLcmNrV03BiA8sTv2OGLpWeefnM1BTj0uweaNoPwruBo0uNbr3pjJp6Xs70aRFo4qCFEEII61KjjTMXLVpk6jhuT8WFcHZbyWTgdeiunORDX18We7nzfz5teWHgVOz9m8EtFkbUFbuy67wjz/VtiIO91LURQghh22p1V3BRgczzJcnMBv2kYE0ueNSjoMndvBIeye9XDzOly8uMaDHCZG+pyegMwEOdw0x2TyGEEMJaSXJjQkZbHZTSFsP5XSUrmzZA6mFQ2esnAHd/AZr246pXCM9unEji1RPM6TWHuxvcbbKYruSpKLpyJx2CNPi5yw7tQgghbJ8kN6ZSstVBTxSUlFch8299r8ypP/RLt139oWlfuGsyNL4bXHwAOJt1lnG/jSRHk8PC2IW0CWhjspBW7E7m1Q0egIp9lxRW7E5meOcGJru/EEIIYY0kuTGFirY62P81BLWGO8bpk5qQ9uX2cdqXto9n/3gWb7U3ywYso76H6aoGn72Sy5RVh1DQz9dRUPHKqsN0bxZAiFfNJiULIYQQdYEkN6Zw9VQFWx0A/WdCxF0VXrIuaR2v/PUKbQPaMqfXHLzUXrccxqXMfDYeS2djYhp/Hk/nxm2+tIpC0uU8SW6EEELYNEluTMG3MajsjBMclT34Nip3qqIoLD6ymNkJsxkQMYC3ur2Fk71TufOqolirY29yBhsT09h4LI1jKdnY26no2MCHx+8MZ8Hm00YJjr1KRbi/a43eSwghhKgrJLkxBa9QGPSR0VYHqkFz9MfLKNYVM2PnDL47/h1Ptn2SCe0mVLz55U1czilkc+L13pmsgmL83JzoERnA+F5N6N40AC9X/b5R4X5uxK06iE5RYadSeGdoG+m1EUIIYfMkuTGVG7Y66NlhpNHLeZo8XvzzRbZe2Mr0rtMZ2nRolW6r0ykcupDJH8fS2JSYxsELmSgKRNX3YnS3CHo1D6RtqBd2duWTpOGdG6Bkb2X6seVMbf6QTCYWQghxW5DkxoRKtzp4yNnH6HhaXhoT4ieQnJ3Mp70/pWto15veJzNPw58n9L0zmxPTuZJbhIezA92bBTAyJpzuzQII8Kjasm4fFwUHt9P4uCj/fLIQQghhAyS5qWUnrp1gXPw4dIqOJf2XEOkbWe4cRVE4lpLNxsQ0Nh1LJyH5GlqdQvNgD4Z1DqNXZCAdGnhLdWEhhBCiCiS5qUU7Lu3guY3PEeoeyrze8whyCzK8lltYzNaTl0smA6eTklWAq5M93Zr489bg1vSMDKCet8yPEUIIIapLkpta8vPJn5m2bRrRIdG83+N93BzdOJWew8ZjaWxKTGfXmasUaXU08ndjQJsQejUPoEuEL2oHe0uHLoQQQtRpktyY0NnsbLT5wXx38Xd2Hd/NkMZD6en3b95fe5aNiWmcvZKHk4MdMY38eGVAc3pGBhLu72bpsIUQQgibIsmNiUxZ/zm/XpyHvYvCrpwUnAvbsXJdNF9p9hHq7UKv5gG8cW8gMY39cHWSZhdCCCFqi/yWNYGDKUn8enEuKtX1FUn5Tgd46I6neKRTW5oGule7no0QQgghakaSGxNIuHDCKLEBUKkUwoPzaRbkYaGohBBCiNuTrC02gY6hTVEU454ZRVHRIbSJhSISQgghbl+S3JhA2+Bw7q33jCHBURQV99Z7hrbB4ZYNTAghhLgNSXJjIjP7jeXZeuPR5ofwbL3xzOw31tIhCSGEELclSW5MqKGHB/Yul2joIfNshBBCCEuR5EYIIYQQNkWSGyGEEELYFKtIbubNm0d4eDjOzs5ER0eza9eum56fkZHB+PHjCQkJQa1W06xZM9asWWOmaIUQQghhzSxe52bFihVMnjyZBQsWEB0dzZw5c4iNjSUxMZHAwMBy5xcVFdG3b18CAwP5/vvvCQ0N5ezZs3h7e5s/eCGEEEJYHYsnN7Nnz2bs2LGMHj0agAULFrB69WoWLlzIlClTyp2/cOFCrl69yrZt23B0dAQgPDy80vsXFhZSWFhoeJ6VlQWARqNBo9FUOc7Sc292jU6rMzxW5961yRpjqgqtVmt4rEtx11VV+foWpiPtbV7S3uZVXFxseDRlm1fnXhZNboqKikhISCAuLs5wzM7Ojj59+rB9+/YKr/nll1+IiYlh/Pjx/PzzzwQEBPDII4/w8ssvY29ffkftGTNmMH369HLH169fj6ura7Vj3rBhQ6WvnbmcCA6QmJhI0RXrGCazxpiqIivnMACHDx0m+YyzhaO5fdzs61uYnrS3eUl7m8fF4osA7Nyxk3MO50x237y8vCqfa9Hk5vLly2i1WoKCgoyOBwUFcezYsQqvOX36NH/88QcjRoxgzZo1nDx5knHjxqHRaJg6dWq58+Pi4pg8ebLheVZWFmFhYfTr1w9PT88qx6rRaNiwYQN9+/Y19Bjd6Ped2XAKIiMj6RM9oMr3rk3WGFNVHD5aAPt+onWb1rRuUXfirquq8vUtTEfa27ykvc3rUNohPv39U6LviKZNYBuT3bd05KUqLD4sVV06nY7AwEA+++wz7O3t6dixIxcuXOC9996rMLlRq9Wo1epyxx0dHWv0RX6z6+zs7QyP1vINZI0xVUVpL5y9vX2diruuq+n3hagZaW/zkvY2DwcHB8OjKdu7OveyaHLj7++Pvb09qampRsdTU1MJDg6u8JqQkBAcHR2NhqBatGhBSkoKRUVFODk51WrMQgghhLBuFl0K7uTkRMeOHYmPjzcc0+l0xMfHExMTU+E13bp14+TJk+h0OsOx48ePExISIomNEEIIISxf52by5Ml8/vnnLFmyhKNHj/L000+Tm5trWD01cuRIownHTz/9NFevXmXixIkcP36c1atX88477zB+/HhLfQQhhBBCWBGLz7kZPnw46enpvPHGG6SkpNCuXTvWrl1rmGScnJyMnd31HCwsLIx169bx3HPP0bZtW0JDQ5k4cSIvv/yypT6CEEIIIayIxZMbgAkTJjBhwoQKX9u0aVO5YzExMezYsaOWoxJCCCFEXWTxYSkhhBBCCFOS5EYIIYQQNkWSGyGEEELYFEluhBBCCGFTJLkRQgghhE2R5EYIIYQQNkWSGyGEEELYFEluhBBCCGFTJLkRQgghhE2R5EYIIYQQNkWSGyGEEELYFEluhBBCCGFTJLkRQgghhE2R5EYIIYQQNkWSGyGEEELYFEluhBBCCGFTHCwdgBAG2Sn6PwAZydcfL+7X/90jWP9HCCGEuAlJboT12LMINs8EwMHJEUJDcNj8DmyYrn+9xxToFWfBAIUQQtQFktwI69FpNETeA0DxtZOwZzrFgxeATxP969JrI4QQogokuRHWo+ywk33JdDD/ZhDU1nIxCSGEqHNkQrEQQgghbIokN0IIIYSwKZLcCCGEEMKmSHIjhBBCCJsiyY0QQgghbIokN0IIIYSwKZLcCCGEEMKmSHIjhBBCCJsiyY0QQgghbIokN0IIIYSwKZLcCCGEEMKmSHIjhBBCCJsiyY0QQgghbIokN0IIIYSwKZLcCCGEEMKmSHIjhBBCCJsiyY0QQgghbIokN0IIIYSwKZLcCCGEEMKmSHIjhBBCCJsiyY0QQgghbIokN0IIIYSwKVaR3MybN4/w8HCcnZ2Jjo5m165dlZ67ePFiVCqV0R9nZ2czRiuEEEIIa2bx5GbFihVMnjyZqVOnsnfvXqKiooiNjSUtLa3Sazw9Pbl06ZLhz9mzZ80YsRBCCCGsmYOlA5g9ezZjx45l9OjRACxYsIDVq1ezcOFCpkyZUuE1KpWK4OBgc4YpzCA9L530/HQAzmSeMTw6OOi/TANcAghwDbBYfEIIISpmbT+/LZrcFBUVkZCQQFxcnOGYnZ0dffr0Yfv27ZVel5OTQ8OGDdHpdHTo0IF33nmHVq1aVXhuYWEhhYWFhudZWVkAaDQaNBpNlWMtPfdm1+i0OsNjde5dm6wxpsosP7qczw5/ZnTste2vGf7+ZOsneartU+YO67ZQla9vYTq23t5arZbi4mIURbF0KAAUFxfj4OBATk6O4ZetMK2fj//Md8e/MzwPcQphXsI8w/NhzYYxvNnwm95DpVLh6OiInV3Fg0rV+X6x6L/y5cuX0Wq1BAUFGR0PCgri2LFjFV4TGRnJwoULadu2LZmZmbz//vt07dqVI0eOUL9+/XLnz5gxg+nTp5c7vn79elxdXasd84YNGyp97czlRHCAxMREiq6sqfa9a4M1xlQZH50P49zHVfq6R7IHa85b92eo62729S1Mzxbb28PDAw8Pj0p/QVlKcHAwp0+ftnQYNiuKKNo2a1vp6ypUHD9+/B/vo9FoSE9PR6fTlXstLy+vyvHUuRQ2JiaGmJgYw/OuXbvSokUL/vvf//LWW2+VOz8uLo7JkycbnmdlZREWFka/fv3w9PSs8vtqNBo2bNhA3759cXR0rPCc33dmwyl9AtYnekA1PpVppeenczn/MgBph0/AeXAL9yKidQQA/i7+BLhY9/BOVdpbmI60t3nZanunpqaSlZVFQEAArq6uqFQqS4cEgKIo5Obm4ubmZjUx2bKatrdOp+PSpUsEBQURGhpa7trSkZeqsGhy4+/vj729PampqUbHU1NTqzynxtHRkfbt23Py5MkKX1er1ajV6gqvq8kPlZtdZ2dvZ3i05A+sn478xPwD842OfXx+CZxfAsDTUU8zrl3lPSTWpKb/TqJmpL3Ny5baW6vVkp2dTVBQEH5+fpYOx4hOpx+Wd3FxsboeJVt0K+0dGBjIxYsXDUNUZVXne8WiyY2TkxMdO3YkPj6eIUOGAPpGiY+PZ8KECVW6h1ar5dChQwwYYLmeEmvzYLMH6RnWE4Bzx/cTtvFZzvX6mLBm7QCsvtdGCFH3lM6HqMlwvxClnJycAP3v9ltJ/C0+LDV58mQee+wxOnXqRJcuXZgzZw65ubmG1VMjR44kNDSUGTNmAPDmm29yxx130KRJEzIyMnjvvfc4e/YsTzzxhCU/hlUJcL0+K93J9SpNijQ4uTagiV9LC0cmhLB1NR32ScsqIC27sNLXAz3UBHpKTTNbZ6phQ4snN8OHDyc9PZ033niDlJQU2rVrx9q1aw2TjJOTk426ta5du8bYsWNJSUnBx8eHjh07sm3bNlq2lF/cQghRVy3bmcxH8ScqfX1i76Y817eZGSMSdZnFkxuACRMmVDoMtWnTJqPnH374IR9++KEZohJCCGEuI6Ib0Lel/n9qT6blMGnFfuYMb0eTQHdA33MjKpeUlERERAT79u2jXbt2Vbpm1KhRZGRk8NNPP9VqbJYgM6uEEEJYXKCnM61DvWgd6mVIaJoEuhuO1eaQ1KhRowzb+Tg5OdGkSRPefPNNiouLAf3qn88++4zo6Gjc3d3x9vamU6dOzJkz56bLk//pvrcSb+k81VJhYWFcunSJ1q1b39K9U1JSeOaZZ2jUqBFqtZqwsDAGDRpEfHz8Ld3X3Kyi50YIIYQodTmn0OjRHPr378+iRYsoLCxkzZo1jB8/HkdHR+Li4nj00UdZtWoVr732Gp988gkBAQEcOHCAOXPmEB4eXi7RqOp9q0ur1VY6J8Xe3v6WK/cnJSXRrVs3vL29ee+992jTpg0ajYZ169Yxfvz4SuvP/ZOioiLDROGyNBpNra0WlJ4bW5SdAhf3w8X9qDP0S+TVGScNx8hOsWR0QghRqRW7kxm9eDcAoxfvZsXuZLO8r1qtJjg4mIYNG/L000/Tp08ffvnlF7777juWLVvGt99+yyuvvELnzp0JDw9n8ODB/PHHH/Tq1atG9wX99kNt2rTBzc2NsLAwxo0bR05OjuHaxYsX4+3tzS+//ELLli1Rq9U8/vjjLFmyhJ9//tnQK7Rp0yaSkpJQqVTs378f0CdCY8aMISIiAhcXFyIjI/noo49uGuu4ceNQqVTs2rWLBx54gGbNmtGqVSsmT57Mjh07DOclJyczePBg3N3d8fT0ZNiwYUYlXaZPn85dd93FF198QUREhGFza5VKxfz587nvvvtwc3Pj7bffrta/UXVIz40t2rMINs8EIKzkUNjGibCx5EmPKdCr+v/XIIQQ1ZVfpOVUes4/n4i+p2bKqkOU7tqgKBC36hBBns74u1d9zk3jAHdcnOxrEq6Bi4sLV65cYdmyZURGRjJ48OBy56hUKry8vGp0X9BvN/Txxx8TERHB6dOnGTduHC+99BKffvqp4fy8vDxmzZrFF198gZ+fHyEhIeTn55OVlcWiRYsA8PX15eLFi0bvo9PpqF+/PitXrsTPz49t27bx5JNPEhISwrBhw8rFdfXqVdauXcvbb7+Nm5tbude9vb0N9y1NbDZv3kxxcTHjx49n+PDhRnNkz5w5w6pVq1i1ahX29tf/LaZNm8bMmTOZM2dOrW6FIcmNLeo0GiLvAeBkeg4Tl+/no4fa0SRAP46Nh2w6KoQwj1PpOdw7d0uNr9cpMGrR7mpd8+szd9I6tHpJRylFUYiPj2fdunU888wzrF69msjIyBrd62b3BZg0aZLh9fDwcP7zn//w1FNPGSU3Go2GTz/9lKioKMMxFxcXCgsLbzoM5ejoaLT1UEREBNu3b+e7776rMLk5efIkiqLQvHnzm36O+Ph4Dh06xJkzZwgL0//v89KlS2nVqhW7d++mc+fOgH4oasmSJeW2V3rkkUcMpV5qkyQ3tsgj2JDAFCiZHFEyKfBvA/Vq9s0uhBA11TjAnV+fubNK517OKWT04t2U3W/TTgULR3Wuds9Ndf3666+4u7uj0WjQ6XQ88sgjTJs2jV9//fUfr/3rr7+45557DM//+9//MmLEiJveF+D3339nxowZHDt2jKysLIqLiykoKCAvL89QDNHJyYm2bSvfs+lm5s2bx8KFC0lOTiY/P5+ioqJKV1JVdZPTo0ePEhYWZkhsAFq2bIm3tzdHjx41JDdhYWEEBJQvGNupU6fqf5AakORGCCFErXFxsq9WL8rMoW2IW3UInaJPbGYMbUPPyMBajFCvV69ezJ8/HycnJ+rVq2cYMmnWrNk/TqTt1KmTYa4LYNRbUdl9k5KSuPfee3n66ad5++238fX1ZcuWLYwZM4aioiJDcuPi4lKjwnbLly/nhRde4IMPPiAmJgYPDw/ee+89du7cWeH5TZs2RaVS1XjS8I0qq1Rd0ZBXbZDkxgaVrfR5Mi3H6BGk0qcQwnoN79yAIE9nRi3azcJRnc2S2ID+l26TJk3KHX/kkUd46KGH+Pnnn8vNu1EUhaysLLy8vCq89mb3TUhIQKfT8cEHHxgK1X733XdVitXJyQmtVnvTc7Zu3UrXrl0ZN+76PoKnTp2q9HxfX19iY2OZN28ezz77bLkkJCMjA29vb1q0aMG5c+c4d+6coffm77//JiMjw6qK6cpqKRu0bGcy987dwr1ztzBpxX4AJq3Ybzi2bKd5Vh8IIURNlA5BVWcoqrYMGzaM4cOH8/DDD/POO++wZ88ezp49y6+//kqfPn3YuHHjP9+kAk2aNEGj0TB37lxOnz7NV199xYIFC6p0bXh4OAcPHiQxMZHLly8b9vUqq2nTpuzZs4d169Zx/PhxXn/9dXbvvvncpXnz5qHVaunSpQs//PADJ06c4OjRo3z88cfExMQA0KdPH9q0acOIESPYu3cvu3btYuTIkfTo0cNsQ05VIT03Nqhspc+KSKVPIYSoGpVKxTfffMNnn33GwoULefvtt3FwcKBp06aMHDmS2NjYGt03KiqK2bNnM2vWLOLi4ujevTszZsxg5MiR/3jt2LFj2bRpE506dSInJ4eNGzcSHh5udM6///1v9u3bx/Dhw1GpVDz88MOMGzeO3377rdL7NmrUiL179/L222/z/PPPc+nSJQICAujYsSPz5883tMfPP//MM888Q/fu3bGzs6N///7MnTu3Ru1QW1RKVWcR2YjSLsTMzEw8PT2rfJ1Go2HNmjUMGDCg0qJD67Z/wwvHZ/B+szhiYx4xVci3paq0tzAdaW/zssX2Ligo4MyZM0Z1TarjxuH0irZfqOlwuk6nIysrC09PT6O9CkXtuJX2vtnXUXV+f0vPjRBCCIuraOPM0mF1kI0zRfVIciOEEMLiZDhdmJIkN0IIISwu0NNZVnEKk5HBRyGEEELYFEluhBBCCGFTJLkRQgghhE2ROTdCCCEsLztF/6cyZfbME+KfSHIjhBDC8vYsgs0zK3+9xxToFWe+eESdJsmNEEIIy+s0GiJLdta+fBxWjYWhn4N/SW0b6bUR1SDJjRBCCMuraNjJvxnUa2eRcETdJhOKhRBC3PZSUlKYOHEiTZo0wdnZmaCgILp168b8+fPJy8uzdHiimqTn5laVmQTnlH3u+uPF/frXZRKcEEJUT06a8WMtO336NN26dcPb25t33nmHNm3aoFarOXToEJ999hmhoaHcd9995a7TaDRWvTdYUVERTk5Olg7DIqTn5lbtWQSf9YDPehC05z0A/WPJMfYssnCAQghRh+xdCt8O1//92+H657Vs3LhxODg4sGfPHoYNG0aLFi1o1KgRgwcPZvXq1QwaNAjQ74g9f/587rvvPtzc3Hj77bfRarWMGTOGiIgIXFxciIyM5KOPPjK6/6hRoxgyZAjvv/8+ISEh+Pn5MX78eDQajeGcS5cuMXDgQFxcXIiIiOCbb74hPDycOXPmGM7JyMjgiSeeICAgAE9PT+6++24OHDhgeH3atGm0a9eOL774osYbmNoK6bm5VWUmwZ07+zccn8G5Xh/TsmFL/evSayOEuJ0V5eknCFdFThr8byIoOv1zRad/7h4M7oFVf0//ZuDkWqVTr1y5wvr163nnnXdwc3Or8ByVSmX4+7Rp05g5cyZz5szBwcEBnU5H/fr1WblyJX5+fmzbto0nn3ySkJAQhg0bZrhu48aNhISEsHHjRk6ePMnw4cNp164dY8eOBWDkyJFcvnyZTZs24ejoyOTJk0lLM+65evDBB3FxceG3337Dy8uL//73v/Tu3Zvjx4/j6+sLwMmTJ/nhhx9YtWoV9vb2VW8zGyPJza0qM+xUlFmkf/RuIpPghBAC9InNZz1qfr2ig28erN41T26u8s/gkydPoigKkZGRRsf9/f0pKCgAYPz48cyaNQuARx55hNGjRxudO336dMPfIyIi2L59O999951RcuPj48Mnn3yCvb09zZs3Z+DAgcTHxzN27FiOHTvG77//zu7du+nUqRMAX3zxBU2bNjVcv2XLFnbt2kVaWhpqtX4T0ffff5+ffvqJ77//nieffBLQD0UtXbqUgICAKn1+WyXJjRBCiNrj30yfbFRFTpp+KKq05wZAZQcPr6h+z80t2rVrFzqdjhEjRlBYWGg4Xpp8lDVv3jwWLlxIcnIy+fn5FBUV0a5dO6NzWrVqZdSTEhISwqFDhwBITEzEwcGBDh06GF5v0qQJPj4+hucHDhwgJycHPz8/o/vm5+dz6tQpw/OGDRve9okNSHIjhBCiNjm5Vq8ne9BH14emVHb658361Vp4TZo0QaVSkZiYaHS8UaNGALi4uBgdv3Hoavny5bzwwgt88MEHxMTE4OHhwXvvvcfOnTuNzrtx4rFKpUKn01FVOTk5hISEsGnTpnKveXt7Vxrf7UqSGyGEENajw0j9HJtvHtT32NRiYgPg5+dH3759+eSTT3jmmWeqnRxs3bqVrl27Mm7cOMOxsj0pVREZGUlxcTH79u2jY8eOgH647Nq1a4ZzOnToQEpKCg4ODoSHh1fr/rcjWS0lhBDCupQOQVVnKOoWfPrppxQXF9OpUydWrFjB0aNHSUxM5Ouvv+bYsWM3nZjbtGlT9uzZw7p16zh+/Divv/46u3fvrtb7N2/enD59+vDkk0+ya9cu9u3bx5NPPomLi4thMnOfPn2IiYlhyJAhrF+/nqSkJLZt28arr77Knj17bunz2yJJboQQQtzWGjduzL59++jTpw9xcXFERUXRqVMn5s6dywsvvMBbb71V6bX//ve/GTp0KMOHDyc6OporV64Y9eJU1dKlSwkKCqJ79+7cf//9jB07Fg8PD8NybpVKxZo1a+jevTujR4+mWbNmPPTQQ5w9e5agoKAaf3ZbJcNSQgghLK/sruClS8fLLiGv5YKoISEhzJ07l7lz51Z6jqIo5Y6p1WoWLVrEokXGNc1mzJhh+PvixYvLXVe2fk3p+69Zs8bw/Pz586SlpdGkSRPDMQ8PDz7++GM+/vjjCuObNm0a06ZNqzT+24kkN0IIISyvol3BV429/ncb3xX8jz/+ICcnhzZt2nDp0iVeeuklwsPD6d69u6VDq5MkuRFCCGF5ZXcFr4iNF0TVaDS88sornD59Gg8PD7p27cqyZcusensHaybJjRBCCMu7zffhi42NJTY21tJh2AyZUCyEEEIImyLJjRBCCCFsiiQ3QgghhLApMudGCCGExaXnpZOen17p6wEuAQS4yp5JomokublFaVkFpGXrN1U7dzXP8Hj4QiYAgR5qAj2dLRafEELUBSuPr2T+gfmVvv501NOMa1f94nji9iTJzS1atjOZj+JPAGDnfAG3CHh/w3HeLcgFYGLvpjzX99Z3qBVCCFv2YLMH6RnWE4DTmaeJ+yuOGXfNoJGXfgPLABfptRFVJ8nNLRoR3YC+LfWlr89kJfLKLvhoeDsiPCMBfc+NEEKImwtwLT/s1MirES39WlooIlGXWcWE4nnz5hEeHo6zszPR0dHs2rWrStctX74clUrFkCFDajfAmwj0dKZ1qBetQ71oHOgOQONAd8MxGZISQgjrNWjQIPr371/ha3/99RcqlYqDBw8C+n2k7O3tWblyZblzp02bhkqlQqVSYW9vT1hYGE8++SRXr141Oi88PLzc1gulkpKSUKlU7N+/3+h5YGAg2dnZRue2a9eu3FYLJ0+e5PHHH6dBgwao1WpCQ0Pp3bs3y5Yto7i4uNz7VeXzVNQ27733HiqVip49e1b4OayBxZObFStWMHnyZKZOncrevXuJiooiNjaWtLS0m16XlJTECy+8wF133WWmSIUQQpjDlfwrRo+1acyYMWzYsIHz58+Xe23RokV06tSJtm3bkpeXx/Lly3nppZdYuHBhhfdq1aoVly5dIjk5mUWLFrF27VqefvrpW44xOzub999//6bn7Nq1iw4dOnD06FHmzZvH4cOH2bRpE0888QTz58/nyJEjRudX5fOEhISwcePGcm2zcOFCGjRocGsfqpZZPLmZPXs2Y8eOZfTo0bRs2ZIFCxbg6upaaWMDaLVaRowYwfTp02nUqJEZoxVCCFGbVp1Yxfj48QCMjx/PqhOravX97r33XgICAsptbpmTk8PKlSsZM2YMACtXrqRly5ZMmTKFP//8k3PnzpW7l4ODA8HBwYSGhtKnTx8efPBBNmzYcMsxPvPMM8yePbvS/+lXFIVRo0bRrFkztm7dyqBBg2jatClNmzbl4YcfZsuWLbRt29bomqp8nsDAQPr168eSJUsMx7Zt28bly5cZOHDgLX+u2mTROTdFRUUkJCQQF3d9MzQ7Ozv69OnD9u3bK73uzTffJDAwkDFjxvDXX3/d9D0KCwspLCw0PM/KygL0+3hoNJoqx1p67s2uKe32Ky4urta9RXlVaW9hOtLe5mWL7a3RaFAUBZ1Oh06nMxzPL84nKTOpSve4kn+FadumoaDffVtBYfq26fir/fFz8atyLOFe4bg4uBiel+7mXRpfWXZ2djz66KMsXryYuLg4VCoVoB9V0Gq1DB8+HJ1Ox5dffsmIESPw8PCgf//+LFq0iNdee63ce5TePykpiXXr1uHk5FTuPSuKo+y1pW1Y+nz48OFs2LCB6dOnG+1aXnqfffv2cfToUZYtW2Z0nxuV3dW8qp9n1KhRTJkyxfB7+ssvv+SRRx4pF3NF71PZ57wZnU6HoihoNBrs7e2NXqvO94tFk5vLly+j1WoJCgoyOh4UFMSxY8cqvGbLli18+eWXhjHJfzJjxgymT59e7vj69etxdXWtdsw3y8IvFl8EYOuWrZxxOFPte4vyTPF/PaLqpL3Ny5bau7TXIicnh6KiIsPxxIxEntj8RI3vq0PH+I3jq3XNFz2+INI7stzxG+etlHrwwQd5//33+e2337jzzjsB/S/xQYMGoVKp2LdvHzt27GDRokVkZWUxdOhQXn31VZ555hlDMlRYWMihQ4fw9PREq9VSUFAAwNtvv234n2rQ//IuKCgwOlYqJycHgNzcXLKysgzP8/LyeO2113j44Yd54okniIiIQKvVUlhYSFZWFgcOHACgfv36hvump6fTvn17w72nTZvGE0/o/x1OnTpVpc+j1Wrp3r07mZmZ/Pbbb7Rr146VK1eyZs0awzyeij7HP7X3zRQVFZGfn8+ff/5Zbp5QXl5ele9Tp1ZLZWdn8+ijj/L555/j7+9fpWvi4uKYPHmy4XlWVhZhYWH069cPT0/PKr+3RqNhw4YN9O3bt9JdWo9ePcqnaz+l253daOHbosr3FuVVpb2F6Uh7m5cttndBQQHnzp3D3d0dZ+frCylau7Zm+YDlVbrHlfwrTNg4wdBzA2CHHXN7zb3lnpvs7Gw8PDwMv7zL6tSpE127dmXFihUMGDCAkydPsn37dv7zn//g6enJypUr6devHxEREQA88MADPPvss+zZs4fevXsDoFariYyM5KeffqKgoIBly5axf/9+XnjhBRwcrv+qtbOzw9nZucLfP+7u+kUpbm5ueHp6Gj2///77ufPOO3n33XdZtmwZ9vb2qNVqPD09cXFxMbqu9O979+4F4O6778be3t7wWlU/j729PX5+fvzf//0fK1euJDU1lWbNmtG1a1dWrlyJg4NDhZ/jn9r7ZgoKCnBxcaF79+5GX0fATROpG1k0ufH398fe3p7U1FSj46mpqQQHl98d9tSpUyQlJTFo0CDDsdIuLwcHBxITE2ncuLHRNWq1GrW6/HJsR0fHGv1Qudl1pV/ADg4ONvMDy9Jq+u8kakba27xsqb21Wi0qlQo7Ozvs7K5P53RzcqNVQKsq32da12lM3z4dnaLDTmXH1JipdG/Q/ZZiK/09URpfRcaMGcMzzzzDp59+ypIlS2jcuDG9evVCp9OxdOlSUlJScHJyMpyv1WpZvHgxffv2NdzbycmJZs30dc3atm3LwIEDeeutt3jrrbeM3quyOEqPlbbhjc9nzpxJTEwML730ktF9IiP1vVQnTpygY8eOhmtKY3FwcDCcq9Vqq/x5Su8zZswYoqOjOXLkCI8//jh2dnZGr9ekvStTeu+Kvjeq871i0eTGycmJjh07Eh8fb1jOrdPpiI+PZ8KECeXOb968OYcOHTI69tprr5Gdnc1HH31EWFiYOcI2UrZk+OnM00aPICXDhRCiOoY2HUqASwDj4sfxyd2fcFd986yIHTZsGBMnTuSbb75h6dKlPP3006hUKtasWUN2djb79u0zmgNy+PBhRo8eTUZGBt7e3hXe87XXXuPuu+/m6aefpl69erccY5cuXRg6dChTpkwxOt6+fXuaN2/O+++/z7Bhw26aUNTk87Rq1YpWrVpx8OBBo/k21sziw1KTJ0/mscceo1OnTnTp0oU5c+aQm5vL6NGjARg5ciShoaHMmDEDZ2dnWrdubXR96T/CjcfNpaKS4XF/XZ8gLSXDhRCiekqHoKozFHWr3N3dGT58OHFxcWRlZTFq1ChAP/dm4MCBREVFGZ3fsmVLnnvuOZYtW8b48RXPCYqJiaFt27a88847fPLJJ4bjFy5cKDdvtGHDhlWK8+2336ZVq1ZGQ10qlYpFixbRt29funXrRlxcHC1atECj0fDnn3+Snp5uSGRq+nn++OMPNBpNpYmctbF4cjN8+HDS09N54403SElJoV27dqxdu9YwyTg5Obna3VrmVLZkeEWkZLgQQtQNY8aM4csvv2TAgAHUq1eP1NRUVq9ezTfffFPuXDs7O+6//36+/PLLSpMbgOeee45Ro0bx8ssvG0YX3n///XJ1a7766ivDZOabadasGY8//jifffaZ0fE77riDhIQE3nnnHcaPH09KSgpubm5ERUXx4Ycf8vjjj9/S53Fzc/vH2KyJSim7Nuw2kJWVhZeXF5mZmdWeULxmzRoGDBhgM2Pk1kza27ykvc3LFtu7oKCAM2fOEBERUW4iaFXcOMRf0d5SNR3i1+l0ZGVl4enpadX/s2wrbqW9b/Z1VJ3f3xbvuRFCCCFkiF+YkiQ3QgghLE6G+IUpSXIjhBDC4iraFVyImpLBRyGEEELYFEluhBBCmMxttkZFmJipvn4kuRFCCHHLSld9VWf/HyFuVLov2Y2bZlaXzLkRQghxy+zt7fH29iYtLQ0AV1fXau8rVFt0Oh1FRUUUFBTIUnAzqGl763Q60tPTcXV1NSpSWBOS3AghhDCJ0j0BSxMca6EoCvn5+bi4uFhNwmXLbqW97ezsaNCgwS3/O0lyI4QQwiRUKhUhISEEBgai0WgsHY5B6TYE3bt3t5miidbsVtrbycnJJL1rktwIIYQwKXt7+1ueM2FK9vb2FBcX4+zsLMmNGVhDe8vgoxBCCCFsiiQ3QgghhLApktwIIYQQwqbcdnNuSgsEZWVlVes6jUZDXl4eWVlZMmZrBtLe5iXtbV7S3uYl7W1etdXepb+3q1Lo77ZLbrKzswEICwuzcCRCCCGEqK7s7Gy8vLxueo5Kuc1qZet0Oi5evIiHh0e11tFnZWURFhbGuXPn8PT0rMUIBUh7m5u0t3lJe5uXtLd51VZ7K4pCdnY29erV+8fl4rddz42dnR3169ev8fWenp7yzWFG0t7mJe1tXtLe5iXtbV610d7/1GNTSiYUCyGEEMKmSHIjhBBCCJsiyU0VqdVqpk6dilqttnQotwVpb/OS9jYvaW/zkvY2L2to79tuQrEQQgghbJv03AghhBDCpkhyI4QQQgibIsmNEEIIIWyKJDdCCCGEsCmS3FTBvHnzCA8Px9nZmejoaHbt2mXpkOqEP//8k0GDBlGvXj1UKhU//fST0euKovDGG28QEhKCi4sLffr04cSJE0bnXL16lREjRuDp6Ym3tzdjxowhJyfH6JyDBw9y11134ezsTFhYGO+++25tfzSrM2PGDDp37oyHhweBgYEMGTKExMREo3MKCgoYP348fn5+uLu788ADD5Cammp0TnJyMgMHDsTV1ZXAwEBefPFFiouLjc7ZtGkTHTp0QK1W06RJExYvXlzbH8/qzJ8/n7Zt2xqKlMXExPDbb78ZXpe2rl0zZ85EpVIxadIkwzFpc9OZNm0aKpXK6E/z5s0Nr9eJtlbETS1fvlxxcnJSFi5cqBw5ckQZO3as4u3traSmplo6NKu3Zs0a5dVXX1VWrVqlAMqPP/5o9PrMmTMVLy8v5aefflIOHDig3HfffUpERISSn59vOKd///5KVFSUsmPHDuWvv/5SmjRpojz88MOG1zMzM5WgoCBlxIgRyuHDh5Vvv/1WcXFxUf773/+a62NahdjYWGXRokXK4cOHlf379ysDBgxQGjRooOTk5BjOeeqpp5SwsDAlPj5e2bNnj3LHHXcoXbt2NbxeXFystG7dWunTp4+yb98+Zc2aNYq/v78SFxdnOOf06dOKq6urMnnyZOXvv/9W5s6dq9jb2ytr16416+e1tF9++UVZvXq1cvz4cSUxMVF55ZVXFEdHR+Xw4cOKokhb16Zdu3Yp4eHhStu2bZWJEycajkubm87UqVOVVq1aKZcuXTL8SU9PN7xeF9pakpt/0KVLF2X8+PGG51qtVqlXr54yY8YMC0ZV99yY3Oh0OiU4OFh57733DMcyMjIUtVqtfPvtt4qiKMrff/+tAMru3bsN5/z222+KSqVSLly4oCiKonz66aeKj4+PUlhYaDjn5ZdfViIjI2v5E1m3tLQ0BVA2b96sKIq+bR0dHZWVK1cazjl69KgCKNu3b1cURZ+M2tnZKSkpKYZz5s+fr3h6ehra96WXXlJatWpl9F7Dhw9XYmNja/sjWT0fHx/liy++kLauRdnZ2UrTpk2VDRs2KD169DAkN9LmpjV16lQlKiqqwtfqSlvLsNRNFBUVkZCQQJ8+fQzH7Ozs6NOnD9u3b7dgZHXfmTNnSElJMWpbLy8voqOjDW27fft2vL296dSpk+GcPn36YGdnx86dOw3ndO/eHScnJ8M5sbGxJCYmcu3aNTN9GuuTmZkJgK+vLwAJCQloNBqj9m7evDkNGjQwau82bdoQFBRkOCc2NpasrCyOHDliOKfsPUrPuZ2/H7RaLcuXLyc3N5eYmBhp61o0fvx4Bg4cWK5dpM1N78SJE9SrV49GjRoxYsQIkpOTgbrT1pLc3MTly5fRarVG/0AAQUFBpKSkWCgq21Dafjdr25SUFAIDA41ed3BwwNfX1+iciu5R9j1uNzqdjkmTJtGtWzdat24N6NvCyckJb29vo3NvbO9/asvKzsnKyiI/P782Po7VOnToEO7u7qjVap566il+/PFHWrZsKW1dS5YvX87evXuZMWNGudekzU0rOjqaxYsXs3btWubPn8+ZM2e46667yM7OrjNtfdvtCi6ErRs/fjyHDx9my5Ytlg7FpkVGRrJ//34yMzP5/vvveeyxx9i8ebOlw7JJ586dY+LEiWzYsAFnZ2dLh2Pz7rnnHsPf27ZtS3R0NA0bNuS7777DxcXFgpFVnfTc3IS/vz/29vblZoGnpqYSHBxsoahsQ2n73axtg4ODSUtLM3q9uLiYq1evGp1T0T3KvsftZMKECfz6669s3LiR+vXrG44HBwdTVFRERkaG0fk3tvc/tWVl53h6etaZH3qm4uTkRJMmTejYsSMzZswgKiqKjz76SNq6FiQkJJCWlkaHDh1wcHDAwcGBzZs38/HHH+Pg4EBQUJC0eS3y9vamWbNmnDx5ss58fUtycxNOTk507NiR+Ph4wzGdTkd8fDwxMTEWjKzui4iIIDg42Khts7Ky2Llzp6FtY2JiyMjIICEhwXDOH3/8gU6nIzo62nDOn3/+iUajMZyzYcMGIiMj8fHxMdOnsTxFUZgwYQI//vgjf/zxBxEREUavd+zYEUdHR6P2TkxMJDk52ai9Dx06ZJRQbtiwAU9PT1q2bGk4p+w9Ss+R7wf9z4bCwkJp61rQu3dvDh06xP79+w1/OnXqxIgRIwx/lzavPTk5OZw6dYqQkJC68/VtkmnJNmz58uWKWq1WFi9erPz999/Kk08+qXh7exvNAhcVy87OVvbt26fs27dPAZTZs2cr+/btU86ePasoin4puLe3t/Lzzz8rBw8eVAYPHlzhUvD27dsrO3fuVLZs2aI0bdrUaCl4RkaGEhQUpDz66KPK4cOHleXLlyuurq633VLwp59+WvHy8lI2bdpktHwzLy/PcM5TTz2lNGjQQPnjjz+UPXv2KDExMUpMTIzh9dLlm/369VP279+vrF27VgkICKhw+eaLL76oHD16VJk3b95tuVR2ypQpyubNm5UzZ84oBw8eVKZMmaKoVCpl/fr1iqJIW5tD2dVSiiJtbkrPP/+8smnTJuXMmTPK1q1blT59+ij+/v5KWlqaoih1o60luamCuXPnKg0aNFCcnJyULl26KDt27LB0SHXCxo0bFaDcn8cee0xRFP1y8Ndff10JCgpS1Gq10rt3byUxMdHoHleuXFEefvhhxd3dXfH09FRGjx6tZGdnG51z4MAB5c4771TUarUSGhqqzJw501wf0WpU1M6AsmjRIsM5+fn5yrhx4xQfHx/F1dVVuf/++5VLly4Z3ScpKUm55557FBcXF8Xf3195/vnnFY1GY3TOxo0blXbt2ilOTk5Ko0aNjN7jdvH4448rDRs2VJycnJSAgACld+/ehsRGUaStzeHG5Eba3HSGDx+uhISEKE5OTkpoaKgyfPhw5eTJk4bX60JbqxRFUUzTBySEEEIIYXky50YIIYQQNkWSGyGEEELYFEluhBBCCGFTJLkRQgghhE2R5EYIIYQQNkWSGyGEEELYFEluhBBCCGFTJLkRQgghhE2R5EYIccuSkpJQqVTs37/f0qEYHDt2jDvuuANnZ2fatWtn6XBqRKVS8dNPP1k6DCHqHEluhLABo0aNQqVSMXPmTKPjP/30EyqVykJRWdbUqVNxc3MjMTGx3AZ9pdLT03n66adp0KABarWa4OBgYmNj2bp1q5mjFUKYkiQ3QtgIZ2dnZs2axbVr1ywdiskUFRXV+NpTp05x55130rBhQ/z8/Co854EHHmDfvn0sWbKE48eP88svv9CzZ0+uXLlS4/cVQlieJDdC2Ig+ffoQHBzMjBkzKj1n2rRp5YZo5syZQ3h4uOH5qFGjGDJkCO+88w5BQUF4e3vz5ptvUlxczIsvvoivry/169dn0aJF5e5/7NgxunbtirOzM61bt2bz5s1Grx8+fJh77rkHd3d3goKCePTRR7l8+bLh9Z49ezJhwgQmTZqEv78/sbGxFX4OnU7Hm2++Sf369VGr1bRr1461a9caXlepVCQkJPDmm2+iUqmYNm1auXtkZGTw119/MWvWLHr16kXDhg3p0qULcXFx3HfffYbzZs+eTZs2bXBzcyMsLIxx48aRk5NjeH3x4sV4e3vz66+/EhkZiaurK//617/Iy8tjyZIlhIeH4+Pjw7PPPotWqzVcFx4ezltvvcXDDz+Mm5sboaGhzJs3r8LPW+rcuXMMGzYMb29vfH19GTx4MElJSYbXN23aRJcuXXBzc8Pb25tu3bpx9uzZm95TCFskyY0QNsLe3p533nmHuXPncv78+Vu61x9//MHFixf5888/mT17NlOnTuXee+/Fx8eHnTt38tRTT/Hvf/+73Pu8+OKLPP/88+zbt4+YmBgGDRpk6AXJyMjg7rvvpn379uzZs4e1a9eSmprKsGHDjO6xZMkSnJyc2Lp1KwsWLKgwvo8++ogPPviA999/n4MHDxIbG8t9993HiRMnALh06RKtWrXi+eef59KlS7zwwgvl7uHu7o67uzs//fQThYWFlbaFnZ0dH3/8MUeOHGHJkiX88ccfvPTSS0bn5OXl8fHHH7N8+XLWrl3Lpk2buP/++1mzZg1r1qzhq6++4r///S/ff/+90XXvvfceUVFR7Nu3jylTpjBx4kQ2bNhQYRwajYbY2Fg8PDz466+/2Lp1K+7u7vTv35+ioiKKi4sZMmQIPXr04ODBg2zfvp0nn3zyth2WFLc5k+0vLoSwmMcee0wZPHiwoiiKcscddyiPP/64oiiK8uOPPyplv82nTp2qREVFGV374YcfKg0bNjS6V8OGDRWtVms4FhkZqdx1112G58XFxYqbm5vy7bffKoqiKGfOnFEAZebMmYZzNBqNUr9+fWXWrFmKoijKW2+9pfTr18/ovc+dO6cASmJioqIoitKjRw+lffv2//h569Wrp7z99ttGxzp37qyMGzfO8DwqKkqZOnXqTe/z/fffKz4+Poqzs7PStWtXJS4uTjlw4MBNr1m5cqXi5+dneL5o0SIFUE6ePGk49u9//1txdXVVsrOzDcdiY2OVf//734bnDRs2VPr372907+HDhyv33HOP4Tmg/Pjjj4qiKMpXX32lREZGKjqdzvB6YWGh4uLioqxbt065cuWKAiibNm26afxC3A6k50YIGzNr1iyWLFnC0aNHa3yPVq1aYWd3/cdDUFAQbdq0MTy3t7fHz8+PtLQ0o+tiYmIMf3dwcKBTp06GOA4cOMDGjRsNPSbu7u40b94c0M+PKdWxY8ebxpaVlcXFixfp1q2b0fFu3bpV+zM/8MADXLx4kV9++YX+/fuzadMmOnTowOLFiw3n/P777/Tu3ZvQ0FA8PDx49NFHuXLlCnl5eYZzXF1dady4seF5UFAQ4eHhuLu7Gx27WXuVPq/sMxw4cICTJ0/i4eFhaD9fX18KCgo4deoUvr6+jBo1itjYWAYNGsRHH33EpUuXqtUeQtgKSW6EsDHdu3cnNjaWuLi4cq/Z2dmhKIrRMY1GU+48R0dHo+cqlarCYzqdrspx5eTkMGjQIPbv32/058SJE3Tv3t1wnpubW5XvaQrOzs707duX119/nW3btjFq1CimTp0K6Je433vvvbRt25YffviBhIQEw7yYspOda6O9bpSTk0PHjh3Ltd/x48d55JFHAFi0aBHbt2+na9eurFixgmbNmrFjx44av6cQdZUkN0LYoJkzZ/K///2P7du3Gx0PCAggJSXFKMExZW2asr9Ii4uLSUhIoEWLFgB06NCBI0eOEB4eTpMmTYz+VCeh8fT0pF69euWWa2/dupWWLVve8mdo2bIlubm5ACQkJKDT6fjggw+44447aNasGRcvXrzl9yh1Y+KxY8cOQ3vdqEOHDpw4cYLAwMBy7efl5WU4r3379sTFxbFt2zZat27NN998Y7J4hagrJLkRwga1adOGESNG8PHHHxsd79mzJ+np6bz77rucOnWKefPm8dtvv5nsfefNm8ePP/7IsWPHGD9+PNeuXePxxx8HYPz48Vy9epWHH36Y3bt3c+rUKdatW8fo0aONVhFVxYsvvsisWbNYsWIFiYmJTJkyhf379zNx4sQq3+PKlSvcfffdfP311xw8eJAzZ86wcuVK3n33XQYPHgxAkyZN0Gg0zJ07l9OnT/PVV19VOsm5JrZu3cq7777L8ePHmTdvHitXrqz0M4wYMQJ/f38GDx7MX3/9xZkzZ9i0aRPPPvss58+f58yZM8TFxbF9+3bOnj3L+vXrOXHiRKXJkhC2TJIbIWzUm2++WW4YpEWLFnz66afMmzePqKgodu3aVeFKopqaOXMmM2fOJCoqii1btvDLL7/g7+8PYOht0Wq19OvXjzZt2jBp0iS8vb2N5vdUxbPPPsvkyZN5/vnnadOmDWvXruWXX36hadOmVb6Hu7s70dHRfPjhh3Tv3p3WrVvz+uuvM3bsWD755BMAoqKimD17NrNmzaJ169YsW7bspkvtq+v5559nz549tG/fnv/85z/Mnj270uXvrq6u/PnnnzRo0IChQ4fSokULxowZQ0FBAZ6enri6unLs2DEeeOABmjVrxpNPPsn48eP597//bbJ4hagrVMqNA/BCCCFqXXh4OJMmTWLSpEmWDkUImyM9N0IIIYSwKZLcCCGEEMKmyLCUEEIIIWyK9NwIIYQQwqZIciOEEEIImyLJjRBCCCFsiiQ3QgghhLApktwIIYQQwqZIciOEEEIImyLJjRBCCCFsiiQ3QgghhLAp/w+sOs3VtGYuewAAAABJRU5ErkJggg==", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt=b.plot('f1_score', xaxis_mode=1)\n", "# plt.savefig('myfig.pdf')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "2135f199", "metadata": {}, "source": [ "### Useful Methods and Attributes\n", "\n", "The benchmarking modules have the following attributes that users may find useful:\n", "\n", "1. results_full: stores the results for all the experiments conducted when calling a benchmarking method (e.g. benchmark_sample_complexity). The results are stored as a List. The length of this list is the number of variants provided in the benchmarking method (4 in the above example-- 100, 500,1000,5000). Each item is a list of dictionary. The length of this inner list is num_exp. Finally, each dictionary has keys same as the algorithm names (PC-PartialCorr, Granger and VARLINGAM in the above example), and their corresponding values are the computed metrics.\n", "\n", "2. default_algo_dict: Python dictionary containing the default algorithms for causal discovery benchmarking.\n", "\n", "3. default_kargs_dict: Python dictionary containing the default algorithms' arguments passed to the corresponding algorithm's run method.\n", "\n", "The benchmarking modules have the following methods that users may find useful:\n", "\n", "1. aggregate_results: This method takes metric name as input and computes attributes results_mean and results_std which matrices of shape num_algorithms x num_variants, and contain the mean and standard deviation of the results of each algorithm and variant.\n", "\n", "2. plot: This method takes metric_name and xaxis_mode as inputs, and returns the matplotlib object for the plot, which cann be used to plot or save the figure. metric_name can be one of f1_score, precision, recall, and time_taken, or a custom metric (if one was specified to the benchmarking module). xaxis_mode can be either 0 or 1 (default). When 0, x-axis is algorithm names, and when 1, x-axis is the values of the variant. Variant denotes the configurations of the argument being varied (e.g. in benchmark_variable_complexity, the number of variables).\n", "\n", "3. bechmark_custom_dataset: This method can be used to benchmark causal discovery algorithms on user provided datasets. More details can be found below under the section **Custom Data**." ] }, { "cell_type": "code", "execution_count": null, "id": "81db5824", "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a495a0b5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "bfcb40d7", "metadata": {}, "source": [ "### custom_metric_dict" ] }, { "cell_type": "markdown", "id": "bf3b52b5", "metadata": {}, "source": [ "In the benchmarking module constructor, users may specify their custom metrics in the argument custom_metric_dict. The argument must be a Python dictionary with the metric name (str) as keys, and the corresponding values must be a callable function. This function takes 2 arguments-- graph_est, graph_gt, where graph_est is the estimated graph and graph_gt is the ground truth graph. Both graphs are in the form of a Python dictionary where keys are variable names and values are list of parent names. The output of this function must be a scalar, the metric, which will get aggregated by the bechmarking module.\n", "\n", "As an example, here is a dummy custom_metric_dict and how we use it:" ] }, { "cell_type": "code", "execution_count": 6, "id": "3eb0830d", "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 0/10 [00:00<?, ?it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 10%|███████████▊ | 1/10 [00:00<00:02, 3.11it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 20%|███████████████████████▌ | 2/10 [00:00<00:02, 3.44it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 30%|███████████████████████████████████▍ | 3/10 [00:00<00:02, 3.44it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 40%|███████████████████████████████████████████████▏ | 4/10 [00:01<00:01, 3.45it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 50%|███████████████████████████████████████████████████████████ | 5/10 [00:01<00:01, 3.44it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 60%|██████████████████████████████████████████████████████████████████████▊ | 6/10 [00:01<00:01, 3.45it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 70%|██████████████████████████████████████████████████████████████████████████████████▌ | 7/10 [00:02<00:00, 3.47it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 80%|██████████████████████████████████████████████████████████████████████████████████████████████▍ | 8/10 [00:02<00:00, 3.45it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 90%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 9/10 [00:02<00:00, 3.46it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 3.42it/s]\n", " 0%| | 0/10 [00:00<?, ?it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 10%|███████████▊ | 1/10 [00:00<00:02, 3.21it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 20%|███████████████████████▌ | 2/10 [00:00<00:02, 3.26it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 30%|███████████████████████████████████▍ | 3/10 [00:00<00:02, 3.30it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 40%|███████████████████████████████████████████████▏ | 4/10 [00:01<00:01, 3.21it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 50%|███████████████████████████████████████████████████████████ | 5/10 [00:01<00:01, 3.21it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 60%|██████████████████████████████████████████████████████████████████████▊ | 6/10 [00:01<00:01, 3.23it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 70%|██████████████████████████████████████████████████████████████████████████████████▌ | 7/10 [00:02<00:00, 3.20it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 80%|██████████████████████████████████████████████████████████████████████████████████████████████▍ | 8/10 [00:02<00:00, 3.20it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 90%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 9/10 [00:02<00:00, 3.17it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:03<00:00, 3.20it/s]\n" ] }, { "data": { "image/png": "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kpOTMW3aNLi4uGDEiBFIS0urqXkSERER1ZhqBaAzZ85g0qRJcHJyQmRkJKZNm4YbN25g//79uHfvHgYNGlRT8yQiIiKqMRpdBh8ZGYmYmBhcu3YN/fv3x4YNG9CvXz8YGBTnKXd3d6xbtw5ubm41OVciIiKiGqFRAFqzZg3GjBmDUaNGwcnJqcw+TZo0wffff1+tyRERERHVBo0CUFJSEvLz83Hx4kWcPXu21I0RBw4cCBMTE4wcObJGJklERERUkzQKQPv27cN7772HBw8elFrGR2EQERFRfafRSdBhYWF4++23kZaWBqVSqfZi+CEiIqL6TqMAlJGRgfDwcDg4ONT0fIiIiIhqnUYB6G9/+xvi4uJqeCpEREREdUOjc4BWr16Nt99+G0eOHIGPjw+MjY3Vln/00Uc1MjkiIiKi2qBRAPrpp5/wxx9/wMzMDHFxcZDJZKplMpmMAYiIiIjqNY0C0BdffIE5c+Zg+vTpqpsfEhEREekKjdJLYWEhQkNDGX6IiIhIJ2mUYEaOHIktW7bU9FyIiIiI6oRGh8AUCgW+/vpr7Nu3D76+vqVOgo6MjKyRyRERERHVBo0C0KVLl+Dv7w8AuHz5stqyZ0+IJiIiIqqPNApABw8erOl5EBEREdUZnsVMREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJKj9QAUFRUFNzc3mJmZITAwEKdOnarUeps3b4ZMJsPgwYPV2jMyMjBq1Cg4OzvDwsICffr0QVJSUi3MnIiIiHSVVgPQli1bEB4ejlmzZuHcuXPw8/NDSEgIMjMzK1zv1q1bmDZtGl555RW1diEEBg8ejJs3b+LXX3/F+fPn4erqiuDgYDx58qQ2SyEiIiIdotUAFBkZiXHjxmH06NHw8vLC2rVrYWFhgejo6HLXUSgUGD58OObMmYMWLVqoLUtKSsKJEyewZs0avPTSS/D09MSaNWvw9OlT/PTTT7VdDhEREekII219cGFhIc6ePYuIiAhVm4GBAYKDgxEfH1/uenPn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iEhatHYVmImJCTp27IjY2FhVm1KpRGxsLIKCgkr1b9OmDS5duoSEhATVa+DAgXj11VeRkJAAFxcX1UnLBgbqZRkaGqrCEhEREZFWD4GFh4dj5MiRCAgIQKdOnbB8+XI8efJEdVXYiBEj0LRpUyxYsABmZmbw9vZWW9/W1hYAVO0mJibo3r07Pv30U5ibm8PV1RWHDh3Chg0bEBkZWae1ERERUf2l1QAUGhqK+/fvY+bMmUhPT0f79u2xd+9e1YnRqamppfbmvMjmzZsRERGB4cOH49GjR3B1dcVXX32FCRMm1EYJREREpIO0fhJ0WFgYwsLCylwWFxdX4brr1q0r1ebo6IiYmJgamBkRERHpK60/CoOIiIiorjEAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkGGl7AvWREAIAkJ2dXeNjy+Vy5OXlITs7G8bGxjU+vraxPt2n7zWyPt2n7zWyPs2V/N0u+TteEQagMuTk5AAAXFxctDwTIiIiqqqcnBzY2NhU2EcmKhOTJEapVOLevXto0KABZDJZjY6dnZ0NFxcX3LlzB9bW1jU6dn3A+nSfvtfI+nSfvtfI+jQnhEBOTg6cnZ1hYFDxWT7cA1QGAwMDNGvWrFY/w9raWi9/sUuwPt2n7zWyPt2n7zWyPs28aM9PCZ4ETURERJLDAERERESSwwBUx0xNTTFr1iyYmppqeyq1gvXpPn2vkfXpPn2vkfXVDZ4ETURERJLDPUBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxANeDw4cMYMGAAnJ2dIZPJsGPHDrXlQgjMnDkTTk5OMDc3R3BwMJKSktT6PHr0CMOHD4e1tTVs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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def mymetric_fn1(graph_est, graph_gt):\n", " '''\n", " graph_est, graph_gt are of the following form: {'a': [('b',-2), ('c',-1)], 'b': [], 'c': []}\n", " where keys are children and values specify the list of parents.\n", " '''\n", " # do something\n", " return 0.5\n", "def mymetric_fn2(graph_est, graph_gt):\n", " '''\n", " graph_est, graph_gt are of the following form: {'a': [('b',-2), ('c',-1)], 'b': [], 'c': []}\n", " where keys are children and values specify the list of parents.\n", " '''\n", " # do something\n", " return 1\n", "\n", "custom_metric_dict = {'mymetric1': mymetric_fn1, 'mymetric2': mymetric_fn2}\n", "\n", "b = BenchmarkContinuousTimeSeries(algo_dict=algo_dict, kargs_dict=kargs_dict, \n", " num_exp=10, custom_metric_dict=custom_metric_dict)\n", "b.benchmark_sample_complexity(T_list=[100, 500], num_vars=5, graph_density=0.1, data_max_lag=3,\\\n", " fn = lambda x:x, coef=0.1, noise_fn=np.random.randn) # default arguments in the library\n", "plt=b.plot('mymetric1', xaxis_mode=1)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "4fb6a0dd", "metadata": {}, "source": [ "### Custom Algorithms\n", "\n", "Users may specify their own algorthms in the benchmarking module. Here we show the format such an algorithm must adhere to in order for the benchmarking module to fuction properly. Users may use this as a template to specify their own algorithm." ] }, { "cell_type": "code", "execution_count": 7, "id": "4d82f4c4", "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 0/10 [00:00<?, ?it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 10%|███████████▊ | 1/10 [00:00<00:04, 1.98it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 20%|███████████████████████▌ | 2/10 [00:01<00:04, 1.99it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 30%|███████████████████████████████████▍ | 3/10 [00:01<00:03, 1.99it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 40%|███████████████████████████████████████████████▏ | 4/10 [00:02<00:03, 1.95it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 50%|███████████████████████████████████████████████████████████ | 5/10 [00:02<00:02, 1.95it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 60%|██████████████████████████████████████████████████████████████████████▊ | 6/10 [00:03<00:02, 1.93it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 70%|██████████████████████████████████████████████████████████████████████████████████▌ | 7/10 [00:03<00:01, 1.92it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 80%|██████████████████████████████████████████████████████████████████████████████████████████████▍ | 8/10 [00:04<00:01, 1.93it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 90%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 9/10 [00:04<00:00, 1.90it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:05<00:00, 1.92it/s]\n", " 0%| | 0/10 [00:00<?, ?it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 10%|███████████▊ | 1/10 [00:01<00:14, 1.58s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 20%|███████████████████████▌ | 2/10 [00:03<00:12, 1.62s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 30%|███████████████████████████████████▍ | 3/10 [00:04<00:11, 1.58s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 40%|███████████████████████████████████████████████▏ | 4/10 [00:06<00:09, 1.58s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 50%|███████████████████████████████████████████████████████████ | 5/10 [00:07<00:07, 1.59s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 60%|██████████████████████████████████████████████████████████████████████▊ | 6/10 [00:09<00:06, 1.60s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 70%|██████████████████████████████████████████████████████████████████████████████████▌ | 7/10 [00:11<00:04, 1.60s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 80%|██████████████████████████████████████████████████████████████████████████████████████████████▍ | 8/10 [00:12<00:03, 1.61s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 90%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 9/10 [00:14<00:01, 1.61s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:16<00:00, 1.61s/it]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABlzElEQVR4nO3dd3wU1d4G8Ge2ZLOb3U3PpjcIoQgJEkFAERWIoHgVr3ARlSa+F7AA1lxFwEJRRCwINkCvqFiQq9JFkCpNgqiQQksglZrd1E123j822WTZAKm7yeT5+skn2Zkzs2cmIXmcOXN+giiKIoiIiIgkQubqDhARERE1JYYbIiIikhSGGyIiIpIUhhsiIiKSFIYbIiIikhSGGyIiIpIUhhsiIiKSFIWrO+BsFosFWVlZ0Ol0EATB1d0hIiKiOhBFEUajEcHBwZDJrn5tps2Fm6ysLISFhbm6G0RERNQAmZmZCA0NvWqbNhdudDodAOvJ0ev1Tbpvs9mMjRs3YtCgQVAqlU26b6rG8+wcPM/Ow3PtHDzPztFc57mgoABhYWG2v+NX0+bCTdWtKL1e3yzhRqPRQK/X8x9OM+J5dg6eZ+fhuXYOnmfnaO7zXJchJRxQTERERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLS5qqCN7X8onzkF+cDAMrLy5FVnoUj549AobCeWn+1P/w1/q7sIhERUZvCcNNI36R+g8WHFtste3/9+7avJ8ZNxKT4Sc7uFhERUZvFcNNI93e4H/3D+gMA0s6l4cXdL+LV3q8ixjcGgPXKDRERETkPw00j+WuqbzuVl5cDAKI8o9DZt7Mru0VERNRmcUAxERERSQrDDREREUkKww0RERFJCsMNERERSQrDDREREUkKww0RERFJCsMNERERSQrDDREREUkKww0RERFJCsMNERERSQrDDREREUkKww0RERFJikvDzbZt2zB06FAEBwdDEASsXr36mtts3boV119/PVQqFdq3b4/ly5c3ez/rSmnKww3FJVCa8lzdFSIiojbLpeGmsLAQcXFxWLRoUZ3anzhxAnfeeSduvfVWJCcnY8qUKXjkkUewYcOGZu5pHfz+GTp+fj+W5uSh4+f3A79/5uoeEREROV9BFvyMfwMFWS7rgsJl7wxg8ODBGDx4cJ3bL1myBFFRUXjzzTcBAJ06dcKOHTvw1ltvITExsdZtSktLUVpaantdUFAAADCbzTCbzY3ofaWcw0DGbig2vQABIgBAEC0Qf3gCFRn7gYBOgE/UZRsJjvsRalnW0Ha1NWn292zCfdXarvp1RXk5vAuPoSJjLwS54krNrrpQvMr+G9/XWto1+/mp7T1raVKPfZWXl8OjNBfleamAQnHV70m9+lXXdnXdV637r6VZPX/O6t2PRhyTudwMZXkhzMZ8QKFs5Hs2oF+NatdCfg7qcC6qfuc3ye9+smfMAUy5EFLXQrHzLfQVLRDfex3lfadC7DAE0BoAXWCj3qI+3zeXhpv62r17NwYMGGC3LDExEVOmTLniNnPmzMGsWbMclm/cuBEajabRfeqb+hr8ClMclgsQoUj+tNH7J0cKAP0AINXFHZE4JYABAPC3izvSBigBDAGAwy7uiMQpAdwNATh49XZiI0J0nbety3Z1DemXLRNrfYe6BcI6b3sZmcUMhVhmv5VogWLHm8CON3E08B6kBA275n6upqioqM5tW1W4ycnJgcFgsFtmMBhQUFCA4uJiqNVqh22SkpIwbdo02+uCggKEhYVh0KBB0Ov1je/U9WEwX3blBrD+oJbf/BwQcj3g37HGBrX86Ii1/Ti5ol1j9lVLs4bu7xptysvLsXv3bvS+8UYoFJf/CDfv+RCa+nw00zlqinbl5eXYv38/EhISoFDIr9CumX8W6tquxfwbqm2za++roqIchw4dQly3bpDX/Jludeeotk2b8vdM49pVVFTgyN9/o1PnzpDL5Q7thEa9Zy3N6rG/a8aTehx7nSJLk/7MADDmoCLvL8gzdjqsLu8zFe063Y12gV1r2V/dVd15qYtWFW4aQqVSQaVSOSxXKpVQKpWNf4Ow660fah3EH5+03pISZBCGvg3l9Q83fv/kyGyGUX0aipC4pvkeUq1EsxnnUgohb3cLFDzPzUo0m5F9yg3drxvCc92MRLMZp/LWoksCz3OT2zIHqCXYAIBi11uAUmX9W9kI9fl936rCTWBgIHJzc+2W5ebmQq/X13rVxqmufxhHPYPx+qaJeHbgYnRqN+Da2xAREUlBwlggdjBwdA3E7fOr/0f/5qeBjnc2erxNfbWqcNO7d2+sXbvWbtmmTZvQu3dvF/XInlkbgP1qd5i1Aa7uChERkfPoAq0fwfEoj3sQe9Z9iV6DR0LpG+GS7rj0UXCTyYTk5GQkJycDsD7qnZycjIyMDADW8TIPP1x9a+ff//43jh8/jmeffRZHjx7F+++/j6+//hpTp051RfeJiIjocvpgnNN1AvTBLuuCS8PN/v370b17d3Tv3h0AMG3aNHTv3h0vvfQSACA7O9sWdAAgKioKa9aswaZNmxAXF4c333wTH3/88RUfAyciIqK2x6W3pfr37w/xKiPua5t9uH///jh48BrP8REREVGbxdpSREREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3TehcyTm7z0REROR8DDdNZFXaKjy59UkAwJNbn8SqtFUu7hEREVHbxHDTBHIKczBr9yyIEAEAIkTM2j0LOYU5Lu4ZERFR26NwdQekIKMgAxbRYrfMIlowbsM4dPTpiFBdKMJ0YQjThSFcFw6DxgC5TO6i3hIREUkbw00TCNeHQybI7AKOAAHd/LrhXMk5bDy5EdmF2bb1SpkSIdoQhOpCEa4LtwWfMF0YQnQhUMlVrjoUIiKiVo/hpgkEegRiRu8ZmLVrFiywQAYZZvSZgWExw2xtzBVmZBVmIdOYiUxjJjIKMnDaeBp7svfgu7TvUFpRCsAaigweBrvAU/ND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9UtlkVGt7QmuDgYdDHoWG5UKjswikriV+zIwdvk+AMDY5fuwcl9Gs79n//798fjjj2PKlCnw9vaGwWDARx99hMLCQowdOxY6nQ7t27fHunXrIIoi2rdvj/nz59vtIzk5GYIgID09/Zrvt2DBAnTt2hUeHh4ICwvDpEmTYDKZrrrNq6++ioCAAOh0OjzyyCN4/vnnER8fb1tvsVjw8ssvIzQ0FCqVCvHx8Vi/fr1t/cmTJyEIAlauXIlbbrkF7u7uWLFiBZYvXw4vLy8A1ltUs2bNwqFDhyAIAgRBwPLly237OHv2LO69915otVr06NEDP/zwg23d1q1bIQgCNmzYgO7du0OtVuO2225DXl4e1q1bh06dOkGv1+OBBx6wm+Rx8ODBePXVV3Hvvfde87xJkSAICPJUo39sACb0i8Yb98fhf5P74vDMRGyZdjMe7ViBSbdEI9rfA0eyjZi/MQUPL92LG+dsRrdZG3Hf4l1IWnUYy3aewM70s8gzlvBKTyvEKzdErUzVRGp1cdZUiudXHbbNKiuKQNKqwzDo3eF3jerQFosFhYWF8DCKiDHooXar33wkn376KZ599lns3bsXK1euxMSJE/H999/j3nvvxX/+8x+89dZbeOihh5CRkYFx48Zh2bJlePrpp23bL1u2DP369UP79u2v+V4ymQzvvPMOoqKicPz4cUyaNAnPPvss3n///Vrbr1ixAq+99href/999O3bF1999RXefPNNREVF2dq8/fbbePPNN/HBBx+ge/fuWLp0Ke6++2789ddfiImJsbV7/vnn8eabb6J79+5wd3fHhg0bbOtGjBiBP//8E+vXr8fPP/8MAPD0rB7zNGvWLLz++uuYN28eFixYgIceeginTp2Cj0/1QNuZM2fivffeg0ajwfDhwzF8+HCoVCp88cUXMJlMuPfee/Huu+/iueeeq8N3pe2yVlhXo4u3iCE3R0GptNbMslhEZF4oqlF3y4hDmRfx3e+nHSqsdwisHNdTedWHFdZbLoYbolbmWL4Jd727o8HbW0RgzLJ99drmp8dvqvdA5Li4OLz44osAgKSkJMydOxd+fn6YMGECAOCll17C4sWL8ccff2DMmDF46aWXsHfvXvTs2RNmsxlffPGFw9WcK5kyZYrt68jISLz66qv497//fcVw8+6772L8+PEYO3asrS8bN260u9ozf/58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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from causalai.data.tabular import TabularData\n", "\n", "class myAlgorithm:\n", " def __init__(self, data):\n", " '''\n", " :param data: this is a TabularData object and contains attributes likes data.data_arrays, which is a \n", " list of numpy array of shape (observations N, variables D).\n", " :type data: TabularData object \n", " '''\n", " self.data = data\n", " # do something\n", " \n", " def run(self, **kargs):\n", " a = kargs['a']\n", " result = {name: {'parents': []} for name in self.data.var_names} # result must follow this format\n", " # do something and compute parents\n", " return result\n", " \n", "\n", "algo_dict = {\n", " 'my_algorithm1':myAlgorithm,\n", " 'Granger':partial(Granger, use_multiprocessing=False, prior_knowledge=None), \n", " 'VARLINGAM':partial(VARLINGAM, use_multiprocessing=False, prior_knowledge=None)}\n", "\n", "kargs_dict = {\n", " 'my_algorithm1': {'a':4},\n", " 'Granger': {'pvalue_thres': 0.01, 'max_lag': 3},\n", " 'VARLINGAM': {'pvalue_thres': 0.01, 'max_lag': 3}}\n", "\n", "b = BenchmarkContinuousTimeSeries(algo_dict=algo_dict, kargs_dict=kargs_dict, \n", " num_exp=10, custom_metric_dict=custom_metric_dict)\n", "b.benchmark_variable_complexity(num_vars_list=[5, 10], graph_density=0.2, data_max_lag=3, T=5000,\\\n", " fn = lambda x:x, coef=0.1, noise_fn=np.random.randn)\n", "plt=b.plot('f1_score', xaxis_mode=1)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "f4f22181", "metadata": {}, "source": [ "my_algorithm1 is a dummy algorithm which always returns a graph without no edges as the estimated causal graph. As expected, comparing it with the Granger and VARLINGAM algorithms in CausalAI for continuous tabular data shows Granger and VARLINGAM outperforming my_algorithm1 on the variable complexity benchmark." ] }, { "cell_type": "code", "execution_count": null, "id": "3f2400c5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "2efc4f96", "metadata": {}, "source": [ "### Custom Data\n", "\n", "Users may use their own data to benchmark causal discovery algorithms instead of using synthetic data generated in our benchmarking module. For this, we support the bechmark_custom_dataset method. This method takes as input a list of datasets, where each item in the list is a triplet-- (data_array, var_names, graph_gt), where data_array is a 2D Numpy data array of shape (samples x variables), var_names is a list of variable names, and graph_gt is the ground truth causal graph in the form of a Python dictionary, where keys are the variable names, and the corresponding values are a list of parent names.\n", "\n", "To illustrate how it works, we manually generate a list of synthetic datasets below, and call the bechmark_custom_dataset method." ] }, { "cell_type": "code", "execution_count": 8, "id": "158d9ec1", "metadata": {}, "outputs": [], "source": [ "from causalai.data.data_generator import DataGenerator, GenerateSparseTimeSeriesSEM\n", "\n", "fn = lambda x:x\n", "coef = 0.1\n", "T = 5000\n", "\n", "data_list = []\n", "for i in range(5):\n", " var_names = [str(j) for j in range(np.random.randint(4,8))]\n", " sem = GenerateSparseTimeSeriesSEM(var_names=var_names, graph_density=0.5, max_lag=3, seed=i)\n", " data_array, var_names, graph_gt = DataGenerator(sem, T=T, seed=i, discrete=False,\n", " noise_fn=[np.random.rand]*(len(var_names)))\n", " data_list.append((data_array, var_names, graph_gt))\n", "\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "8fd65005", "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 0/5 [00:00<?, ?it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 20%|███████████████████████▊ | 1/5 [00:00<00:03, 1.04it/s]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 40%|███████████████████████████████████████████████▌ | 2/5 [00:02<00:03, 1.29s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 60%|███████████████████████████████████████████████████████████████████████▍ | 3/5 [00:03<00:02, 1.21s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", " 80%|███████████████████████████████████████████████████████████████████████████████████████████████▏ | 4/5 [00:04<00:01, 1.22s/it]/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "/Users/darpit/miniconda3/envs/causal_ai_env/lib/python3.9/site-packages/statsmodels/tsa/tsatools.py:821: FutureWarning: trend 'nc' has been renamed to 'n' after 0.14 is released. Use 'n' now to avoid this warning.\n", " warnings.warn(\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:05<00:00, 1.19s/it]\n" ] } ], "source": [ "# use default algorithms\n", "b = BenchmarkContinuousTimeSeries(algo_dict=None, kargs_dict=None, custom_metric_dict=None)\n", "b.bechmark_custom_dataset(data_list)" ] }, { "cell_type": "code", "execution_count": 10, "id": "a6c5d381", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlIAAAGdCAYAAADZiZ2PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZO0lEQVR4nO3deVxUVeMG8GfYZtiRnWGRTUVBBwVF1FwKJTFFs7SyV180ejOtjMqkzK2Ft7c0fctcKrXU0vppLqko4YILbsighDsqyi4uIyAwMPf3h69TE6B4HRiQ5/v58ME5c+6Zc5Ez9+HeM+dKBEEQQEREREQPzMjQHSAiIiJqqRikiIiIiERikCIiIiISiUGKiIiISCQGKSIiIiKRGKSIiIiIRGKQIiIiIhKJQYqIiIhIJBNDd6A50mg0yMvLg7W1NSQSiaG7Q0RERA0gCAJu3boFuVwOI6OmOVfEIFWHvLw8eHp6GrobREREJMLly5fh4eHRJK/FIFUHa2trAHf+I2xsbPTatlqtxo4dOzBo0CCYmprqtW0iuj+OQSLDa6xxqFKp4OnpqT2ONwUGqTrcvZxnY2PTKEHKwsICNjY2fBMnMgCOQSLDa+xx2JTTcjjZnIiIiEgkBikiIiIikQwapFJSUjB06FDI5XJIJBJs2LDhvtvs3r0b3bp1g1Qqhb+/P1asWKHzfEJCArp37w5ra2s4Oztj+PDhOH36dOPsABEREbVqBg1SZWVlUCgUWLhwYYPqX7hwAUOGDMGAAQOgVCoxZcoUvPTSS9i+fbu2zp49ezBp0iQcPHgQSUlJUKvVGDRoEMrKyhprN4iIiEgPBEGAWq1GRUVFvV81NTWG7qYOg042Hzx4MAYPHtzg+osXL4aPjw/mzp0LAOjYsSP27duHL774ApGRkQCAxMREnW1WrFgBZ2dnpKWloW/fvvrrPBEREelNVVUV8vPzUV5efs96EokEHh4esLKyaqKe3VuL+tReamoqIiIidMoiIyMxZcqUere5efMmAMDe3r4xu0ZEREQiaTQaXLhwAcbGxpDL5TAzM6vzk3eCIKC4uBhXrlxBu3btYGxsbIDe6mpRQaqgoAAuLi46ZS4uLlCpVLh9+zbMzc11ntNoNJgyZQp69+6NoKCgetutrKxEZWWl9rFKpQJw5+OZarVaj3sAbXv6bpeIGoZjkMjw/j4OKysrUVNTA3d3d1hYWNxzWwcHB5SWluL27duQSqV1ttuUWlSQelCTJk1CZmYm9u3bd896CQkJmD17dq3yHTt23Pc/VKykpKRGaZeIGoZjkMjw7o5DExMTuLq6ory8HNXV1ffcpqqqCrdv38aePXtq1b3fZcHG0KKClKurKwoLC3XKCgsLYWNjU+ts1OTJk/Hbb78hJSXlvsvEx8fHIy4uTvv47sqogwYNapQFOZOSkjBw4EAuBkhkAByDRIb393FYUVGBy5cvw8rKCjKZ7J7bVlRUwNzcHH379q1V9+4VpabUooJUeHg4tm7dqlOWlJSE8PBw7WNBEPDaa6/h119/xe7du+Hj43PfdqVSaa3TgwBgamraaG+0jdk2Ed0fxyCR4d0dhzU1NZBIJDAyMrrvzYaNjIwgkUjqHMOGGNMGXf6gtLQUSqUSSqUSwJ3lDZRKJXJycgDcOVM0duxYbf1XXnkF2dnZmDp1Kk6dOoWvv/4aP//8M958801tnUmTJmHVqlX48ccfYW1tjYKCAhQUFOD27dtNum9ERET06DNokDp69Ci6du2Krl27AgDi4uLQtWtXzJgxAwCQn5+vDVUA4OPjgy1btiApKQkKhQJz587Ft99+q136AAAWLVqEmzdvon///nBzc9N+rV27tml3joiIiB55Br20179/fwiCUO/zf1+1/O426enp9W5zr/aIiIjIMIpUFSi6decT8tXV1bhcCvyRp4KJiQk01VUw0ggNOoY3t+N8i5ojRURERC3T6kM5WJB89i8lJvj8xEEAgLmJBN+NcEd5eXmtD4/9XVVVFQA0izWkAAYpIiIiagJjwrwwsNOdtSBP59/EW/93AnOf6YwObrYAAJlahaKiIgCAhYVFnQtyajQaFBcXw8LCAiYmzSPCNI9eEBER0SPN2UYGZ5s7yxXcXf/Jz8kSQe53gpQg2KCgoEAbpupjZGQELy+vOoOWITBIERERkcFJJBK4ubnB2dn5niuUm5mZ3XeJhKbEIEVERETNhrGxcbOZ/9QQzSfSEREREbUwDFJEREREIjFIEREREYnEIEVEREQkEoMUERERkUgMUkREREQiMUgRERERicQgRURERCQSgxQRERGRSAxSRERERCIxSBERERGJxCBFREREJBKDFBEREZFIDFJEREREIjFIEREREYnEIEVEREQkEoMUERERkUgMUkREREQiMUgR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eu1/Rs414MRR9OzZEwove722TUT3p1arkZSUhIEDB8LU1NTQ3SFqlRrrWHj3ilJTMmiQcnR0hLGxMQoLC3XKCwsL4erqWuc2Tk5O2LBhAyoqKlBSUgK5XI5p06bB19e33texs7ND+/btce7cuTqfl0qlkEqltcpNTU31/kZrYmKi/c43cSLDaYzxTUQN01jHQkOMaYNONjczM0NISAiSk5O1ZRqNBsnJyQgPD7/ntjKZDO7u7qiursa6desQHR1db93S0lKcP38ebm5ueus7ERERkcE/tRcXF4dvvvkG33//PU6ePImJEyeirKwMMTExAICxY8fqTEY/dOgQ1q9fj+zsbOzduxdPPvkkNBoNpk6dqq3z9ttvY8+ePbh48SIOHDiAESNGwNjYGM8//3yT7x8RERE9ugw+R2r06NEoLi7GjBkzUFBQgODgYCQmJmonoOfk5MDI6M+8V1FRgenTpyM7OxtWVlaIiorCypUrYWdnp61z5coVPP/88ygpKYGTkxP69OmDgwcPwsnJqal3j4iIiB5hBg9SADB58mRMnjy5zud2796t87hfv37Iysq6Z3tr1qzRV9eIiIiI6mXwS3tERERELRWDFBEREZFIDFJEREREIjFIEREREYnEIEVEREQkEoMUERERkUgMUkREREQiMUgRERERicQgRURERCQSgxQRERGRSAxSRERERCIxSBERERGJxCBFREREJBKDFBEREZFIDFJEREREIpkYugNERET06CtSVaDoViUA4Hxxmfa7icmdKOJsLYWzjcxg/ROLQYqIiIga3epDOViQfFan7K3/O6H99xtPtMObA9s3dbceGoMUERERNboxYV4Y2MkFAFBdXY19+/ahT58+OmekWiIGKSIiImp0zjYy7aU7tVqNS1ZAoNwGpqamBu7Zw+FkcyIiIiKRGKSIiIiIRGKQIiIiIhKJQYqIiIhIJAYpIiIiIpEYpIiIiIhEYpAiIiIiEolBioiIiEgkBikiIiIikRikiIiIiERikCIiIiISiUGKiIiISCQGKSIiIiKRmkWQWrhwIby9vSGTyRAWFobDhw/XW1etVmPOnDnw8/ODTCaDQqFAYmJivfX//e9/QyKRYMqUKY3QcyIiImrNDB6k1q5di7i4OMycORPHjh2DQqFAZGQkioqK6qw/ffp0LFmyBF9++SWysrLwyiuvYMSIEUhP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/bXq/Otf/8LTTz+N0aNHIywsDCUlJTp/XdfF19cXx44dw4ABA/DWW28hKCgIAwcORHJyMhYtWgTgzs9j48aNaNOmDfr27YuIiAj4+vpi7dq1D/5DIGpEfn5+SE9PR0REBOLj46FQKBAaGoovv/wSb7/99j0vJYgZP3X54Ycf4OLigr59+2LEiBGIjY2FtbU1ZDIZAGj/mu/bty9iYmLQvn17PPfcc7h06ZLOFAGi5mLChAm4fv06IiMjIZfLUVhYiC1btmDkyJG16hoZGWHEiBH47rvv7tnmm2++iW+//RaXL1/Wln3++efo2rWrzteWLVsa1Mf27dtj/PjxqKio0Cnv2bMn0tLS0KFDB0yaNAmdOnVCr1698NNPP+GLL77AxIkTH2p/LC0tHypEAYBEaOiMZSKiVujKlSvw9PTUftCEiOivGKSIiP5i586dKC0tRefOnZGfn4+pU6ciNzcXZ86cqTVRnYioRU82JyLSN7Vajffeew/Z2dmwtrZGr169sHr1aoYoIqoTz0gRERERifRITjYnIiIiagoMUkREREQiMUgRERERicQgRURERCQSgxQRERGRSAxSRERERCIxSBERERGJxCBFREREJBKDFBEREZFI/w9YpXI96rM/9AAAAABJRU5ErkJggg==", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt = b.plot('f1_score', xaxis_mode=0)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "953e3eb7", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" } }, "nbformat": 4, "nbformat_minor": 5 }